{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "6HPvYgkOjlHg"
   },
   "source": [
    "# 逻辑回归 Logistic Regression\n",
    "\n",
    "此Notebook是配合Andrew Ng \"Machine Leanring\"中[逻辑回归](https://github.com/loveunk/machine-learning-deep-learning-notes/blob/master/machine-learning/logistic-regression.md)部分学习使用。\n",
    "\n",
    "测试用python版本为3.6\n",
    "* 机器学习路径：https://github.com/loveunk/machine-learning-deep-learning-notes/\n",
    "* 内容正文综合参考网络资源，使用中如果有疑问请联络：www.kaikai.ai"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "2bSRbRGTjlHi"
   },
   "source": [
    "在这一次练习中，我们将要实现逻辑回归并且应用到一个分类任务。我们还将通过将正则化加入训练算法，来提高算法的鲁棒性，并用更复杂的情形来测试它。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "WXk4cLxBjlHj"
   },
   "source": [
    "## 准备数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "nfrEaVuajlHl"
   },
   "source": [
    "在训练的初始阶段，我们将要构建一个逻辑回归模型来预测，某个学生是否被大学录取。设想你是大学相关部分的管理者，想通过申请学生两次测试的评分，来决定他们是否被录取。现在你拥有之前申请学生的可以用于训练逻辑回归的训练样本集。对于每一个训练样本，你有他们两次测试的评分和最后是被录取的结果。为了完成这个预测任务，我们准备构建一个可以基于两次测试评分来评估录取可能性的分类模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "2zO2vzfujlHm"
   },
   "source": [
    "让我们从检查数据开始。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Requirement already satisfied: seaborn in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (0.13.2)\n",
      "Requirement already satisfied: numpy!=1.24.0,>=1.20 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from seaborn) (1.26.4)\n",
      "Requirement already satisfied: pandas>=1.2 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from seaborn) (2.2.3)\n",
      "Requirement already satisfied: matplotlib!=3.6.1,>=3.4 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from seaborn) (3.9.2)\n",
      "Requirement already satisfied: contourpy>=1.0.1 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.3.0)\n",
      "Requirement already satisfied: cycler>=0.10 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (0.12.1)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (4.54.1)\n",
      "Requirement already satisfied: kiwisolver>=1.3.1 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.4.7)\n",
      "Requirement already satisfied: packaging>=20.0 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (24.1)\n",
      "Requirement already satisfied: pillow>=8 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (10.4.0)\n",
      "Requirement already satisfied: pyparsing>=2.3.1 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (3.2.0)\n",
      "Requirement already satisfied: python-dateutil>=2.7 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (2.9.0.post0)\n",
      "Requirement already satisfied: importlib-resources>=3.2.0 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (6.4.5)\n",
      "Requirement already satisfied: pytz>=2020.1 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from pandas>=1.2->seaborn) (2024.2)\n",
      "Requirement already satisfied: tzdata>=2022.7 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from pandas>=1.2->seaborn) (2024.2)\n",
      "Requirement already satisfied: zipp>=3.1.0 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from importlib-resources>=3.2.0->matplotlib!=3.6.1,>=3.4->seaborn) (3.20.2)\n",
      "Requirement already satisfied: six>=1.5 in /home/nginx/miniconda/envs/jupyter/lib/python3.9/site-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.4->seaborn) (1.16.0)\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "pip install seaborn -i https://pypi.tuna.tsinghua.edu.cn/simple"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "meEb58oJjlHn",
    "tags": []
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('fivethirtyeight')\n",
    "from sklearn.metrics import classification_report # 这个包是评价报告"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "zqEIXn3sjlHr",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>exam1</th>\n",
       "      <th>exam2</th>\n",
       "      <th>admitted</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34.623660</td>\n",
       "      <td>78.024693</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>30.286711</td>\n",
       "      <td>43.894998</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>35.847409</td>\n",
       "      <td>72.902198</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>60.182599</td>\n",
       "      <td>86.308552</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.032736</td>\n",
       "      <td>75.344376</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       exam1      exam2  admitted\n",
       "0  34.623660  78.024693         0\n",
       "1  30.286711  43.894998         0\n",
       "2  35.847409  72.902198         0\n",
       "3  60.182599  86.308552         1\n",
       "4  79.032736  75.344376         1"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path = 'ex2data1.txt'\n",
    "data = pd.read_csv(path, header=None, names=['exam1', 'exam2', 'admitted'])\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "8r4bOK-K8J4i",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>exam1</th>\n",
       "      <th>exam2</th>\n",
       "      <th>admitted</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>65.644274</td>\n",
       "      <td>66.221998</td>\n",
       "      <td>0.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>19.458222</td>\n",
       "      <td>18.582783</td>\n",
       "      <td>0.492366</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>30.058822</td>\n",
       "      <td>30.603263</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>50.919511</td>\n",
       "      <td>48.179205</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>67.032988</td>\n",
       "      <td>67.682381</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>80.212529</td>\n",
       "      <td>79.360605</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>99.827858</td>\n",
       "      <td>98.869436</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            exam1       exam2    admitted\n",
       "count  100.000000  100.000000  100.000000\n",
       "mean    65.644274   66.221998    0.600000\n",
       "std     19.458222   18.582783    0.492366\n",
       "min     30.058822   30.603263    0.000000\n",
       "25%     50.919511   48.179205    0.000000\n",
       "50%     67.032988   67.682381    1.000000\n",
       "75%     80.212529   79.360605    1.000000\n",
       "max     99.827858   98.869436    1.000000"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "bvQFnaZojlH1"
   },
   "source": [
    "让我们创建两个分数的散点图，并使用颜色编码来可视化，如果样本是正的（被接纳）或负的（未被接纳）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "4VZ-TIUmjlH3",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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AAAAxojMzB4lJTlVVzf0mORkpzIyglPf5tVXX1VDQ4Pmzp2rY445ZshxV111lf7+97/rySef1P3336+rrrpK69atU3p6ui666CJ1dXWpoqJCp512mqqrqwP3BL40f/58GQwG/eIXv9B//vMfjR8/XgkJCbr22msl9TbyefPNN3X55Zdrzpw5io6OVnp6uubOnavp06fr17/+tW666SbNnj1bF1xwgY499ljZbDa9//77fW3GH3jggb77CrXnP5aQcYMxydXy2xv9W4UDAAAACG0mk1RZ2aa0NLssFvfMG4vFobQ0uyor2/TlTp+Ac21/Wrx4scdxl112meLi4vTcc8+pvb1dDz30kO644w4ZDAaVl5frpZdeUl5enn75y18GYtoDnHjiiSopKdERRxyhsrIy3X333Vq1alXf+VtuuUVXX321du3apfvvv1933323Xn311b7zV199tV566SUtWLBA//jHP1RaWqrKykp99tlnuv766wd0dA615z+WGPbt2xe8jYEImo6ODjU2Nio5Odmtdd1YYKyvl2X27EG7Sg3FaTLJtn07BYq9NJbXB/yP9QFPWB/whPUBT1gfY88nn3yiI4880m/3b7dL1dVRWr06Ri0tUny8Qzfc0KnMTEfQgjYITQ6HQ11dXYqOjpbRGBr5Kb78/WCrFMYcR2qq2svLB20J7khJGbB9ymkyqb28nKANAAAAMIaYTJLV2iOrtSckL8yBQGHFY0zqzs5We3m5nP1C7e3FxWrdscOt25QraNOdnR2MaQIAEPbsdqmqKkpWq1lz51pktZpVVRWlYSTGAgAAD8i4wZjlCsbE5eSoo6iorwCx69/YwkKCNgAA+FFzs0FZWWY1NRnU2vrV54G1tUYlJTlVWdmmxER25QMAMBoEbjCmdWdnyz5r1oBtUF25uerJyGB7lI/Y7dKGDVEqKYlRS4tBCQlO5eV1KjOzh/3FABCh7HYpK8usurqBbwStrUbV1fWer6mx8V4BAMAoELjBmDdUcIagjW/waSoAYDAbNkSpqcngcUxjo0HV1VGyWoPTshcAgHBAjRsAQ+r/aWr/oI3k+jTVpKwsM3UMACAClZTEDHhvOJjNZtTq1TEBmhEAAOGJwA2AIW3cGO31p6kAgMjS0uL5/WG44wAAwOAI3AAY0sMPm/k0FQAwqIQE77bJejsOAAAMjsANgCHxaSoA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586dWrVqlbZs2aL169crNjbW7/MGQkF3drYkKS4nR4YvN7y7ukf130blCtq4xgMAgNBVUhLjtj1qMDabUatXx8hq7QnQrAAA3hpx4KapqUlpaWmaNGmSx3FHHnmk0tLS9N///nekDzUs3/jGN/SNb3xjwPGuri6Vl5crKipKixYt6jv+4IMPqra2VsuWLdOdd97Zd/zOO+/UypUrtWbNGt10002BmDoQErqzs9XV1aWEvDy13nmnnF/WsHHVsoktLCRoAyCk2O29GQUlJTFqaTEoIcGpvLxOZWb2sO0DkNTS4jnbZrjjAACBNeLATVRUlDo7O70a29XVpaio4KZeVlVV6fPPP9eCBQuUmJgoSXI6nXryySdlsVh0yy23uI2/5ZZb9Mgjj+iJJ54gcIOI03nppfp3YqIS09PVP9+sKzeXmjYAQgoFVxFKQjWImJDg3e+At+OA4QrV3w1grBhxNOW4447Tzp079c477+jrX//6kOP+85//6J133tHMmTNH+lA+8cQTT0iSvv/97/cd2717tz766COdd955MpvNbuPNZrPOOOMMvfzyy2pqalJSUlJA5wsEW2dy8qDHCdoACBUUXEUoCeUgYl5ep2prjR63S1ksDuXne/ehLDAcofy7AYwVIw7cXHLJJfrXv/6lJUuWqKysTLNmzRow5l//+peuueYaSVJWVtaIJzlaH3zwgTZv3qyjjz5a559/ft/x3bt3S5JSh7gQTU1N1csvv6zdu3cfMnDT0dHhuwkHQFdXl9u/QH+sD3jC+oAngVwff/lLtBobD11w9c9/digjg/UaCsL19cNuly6++Ai9887QQcSLL47Tpk2fByWIeM450tSp0XrnnaEDN0lJdp19tk3B/JM2XNdHJPPl7wbrA56MtfUx3Dq6Iw7cXHfddfr973+vd955R+eee67OPPNMTZ8+XYmJiWpubtbbb7+tN954Q06nU2lpabruuutG+lCjtm7dOjkcDi1atEimfq8I+/fvl9RbRHkw48ePdxvnyZ49e2T/spjrWLJ3795gTwEhjPUBT/y9Pux26bXXJujppyertdWk+Hi7Fi/eq/nz95E9MQYE4vXjoYe+Lpvt0AVXV66M0vTpu/0+H3gv3N5fXnllghobJ3oc09ho0DPP7NfZZ7cEaFbuHnzwI11//Qn6+ONoHTjw1SXAYYf1aMqULq1c+a72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K0las2aNsrKytGXLFtXX1+t73/te35h3331XV155pR599FG9+uqro5+tF44//nhJQ29/ch3v6OjQcccdJ0mqr68fdKzruGscxpbu7GxJGtDa2PWvq7WxaxwQ6bwt6B1XXi5lZgZoVnDZsCFKTU2es1cbGw2qro6ikB8AAEAYMR56yOC2b9+uCRMm6JJLLhlyzAknnKDHH39cjY2Nuvfee0f6UMMyf/58Sb1Bo4N1d3ervr5eZrNZkyZN0nHHHacpU6Zo27Ztamtrcxvb1tambdu2KSUlhY5SY1h3drZs27cP6BrVlZsr2/btBG2AL/XPRDuU8StWKPGZZ/w8IxyspCRGra2e37ZtNqNWr44J0IwAAAAQCCMO3Hz22WdKSkrqq11j+jIvu7293W3cySefrOOPP14bNmwYxTS9d+yxx+rcc89VfX29nnjiCbdzDzzwgFpaWrRgwQJFRUXJYDBoyZIlstlsuu+++9zG3nfffbLZbLr66qsDMm/4z1CtgWkZDPQy1tcrtrBwWLdJfvBBmd57z08zwmBaWryrFeftOAAAAIwNI94qFR8f71aI2LUFqampqW+7kkt0dLQaA9jp49e//rUuvPBC/e///q+qqqp0/PHHa+fOnXr11VeVnJysX/ziF31jb7zxRq1fv14rV67Uzp07NXPmTO3YsUObNm3SKaecotyDMjUAINw4UlPVXl7uVhOq71xKyoDtU06TSfV33SXLscdGRG2ZUJGQ4Dz0oGGMAwAAwNgw4oybqVOnurXa+vrXvy5J2rRpk9u4vXv3ateuXQEtEHTsscfqb3/7mxYvXqx//etfevjhh1VfX6+cnBxt2rRJkydP7htrNptVVVWl3Nxcvfvuu1q9erXeffdd5efnq7KyUnFxcQGbNwAES3d2ttrLy+XsV9W2vbhYrTt2qL24uO+YqwvbFxdeGIxpRrS8vE7Fx3vuGGWxOJSf3xmgGQEAACAQRpxxc8YZZ+jRRx/ta7l10UUX6YEHHtDPf/5zjRs3TnPmzNHevXt11113qaurS+eff74v531ISUlJWrNmjVdjExISVFxcrOJ+FycAEGm8LejdabVKAcyiRK/MzB4lJTlVVzf0mORkpzIyKEwMAAAQTkaccXPhhRfK4XCourpaknTKKado4cKFam9v180336y5c+cqOztbb775psxms37605/6bNIAAP+goHfoMpmkyso2paXZZbG4Z95YLA6lpdlVWdkWEq3AAQAA4Dsjzri54IIL1NTUpOjo6L5ja9as0YknnqhnnnlGDQ0NiouL09y5c/XTn/5UaWlpPpkwAMC/KOgduhITnaqpsam6OkqrV8eopcWghASn8vM7lZHRQ9AGAAAgDI04cCP11ofpz2Qy6cc//rF+/OMfj2pSAABgcCaTZLX2yGplSxQAAEAkGPFWKQAAAAAAAPjXiAM327dvH9Z4bwsFAwAAAAAAoNeIAzcLFizQypUrDznus88+08KFC1VYWDjShwIAAAAAAIhIIw7c9PT06K677tJll12m5ubmQcds3rxZ8+bN00svvaSJEyeOeJIAAAAAAACRaMSBmz/+8Y868sgj9corr2j+/Pl6+eWX+845HA7dddddys7O1scff6yzzjpLr732mk8mDAAAAAAAEClGHLg5++yztWXLFp177rlqbm7WwoULtWLFCu3atUuZmZlauXKljEajVqxYoT/96U866qijfDlvAAAAAACAsDeqrlKTJk3S888/r5///OcymUwqKSnR6aefru3btys5OVnr16/XTTfdJIPB4Kv5AgAAAAAARAyftAO/5pprNHfuXDmdTjmdTplMJq1atUqzZ8/2xd0DAAAAAABEpFEHbv7973/rW9/6ljZv3qy4uDideOKJstvtuuKKK2gBDgAAAAAAMAqjCtyUl5frggsu0LvvvqsTTzxRf/vb3/Tqq69q6dKl6u7uVmFhob773e/qs88+89V8AQAAACDi2O1SVVWUrFaz5s61yGo1q6oqSnZ7sGcGwN+iRnrD733ve1q/fr2cTqd+8IMfqLi4WDExMZKk4uJinXPOObr++uu1ceNGzZs3T2vXrtXZZ5/ts4kDAAAAQCRobjYoK8uspiaDWlu/+uy9ttaopCSnKivblJjoDOIMAfjTiDNuqqqqNH78eD322GO6//77+4I2LhkZGdqyZYvmzZunjz/+WN/5zndGPVkAAAAAiCR2u5SVZVZdncktaCNJra1G1dWZlJVlJvMGCGMjDtycfvrpqqmpUVZW1pBjjjrqKL3wwgv66U9/SmcpAAAAABimDRui1NTk+VqqsdGg6uoRb6YAEOJGHLhZv369kpKSDjnOYDDo5ptvVlVV1UgfCgCCxlhfP6zjAAAAvlRSEjMg0+ZgNptRq1fHeBwDYOwaceDGZDINa/zpp58+0ocCgKAYV1Ehy+zZii4tdTseXVoqy+zZGldREaSZAQCASNHS4t3OBW/HARh7Rt0O3Bu1tbXasmVLIB4KAHxiXEWF4nJyZLDbFVdQ0Be8iS4tVVxBQe/xnByCNwAAYABfdoBKSPCu6LC34wCMPV5vhDziiCN05plnav369QPOfe9739OJJ56owsLCQW9766236u9//zttwQGMCf2DNi5xBQWKWbtWxoaGvmOu4I0kdWdnB3yeAAAg9Pi6A1ReXqdqa40et0tZLA7l53eOat4AQpfXGTdOp1NO5+AvMFVVVYfMqBnqtgAQSoz19QOCNn3n+gVtXFzBG2reAAAAf3SAyszsUVKS52up5GSnMjJ6RjJlAGNAQLZKAcBY4UhNVUdR0bBu01FUJEdqqp9mBAAAxgp/dIAymaTKyjalpdllsTjczlksDqWl2VVZ2aZhliAFMIYQuAGAg3Tl5qq9uNirse3FxerKzfXzjAAAwFjgrw5QiYlO1dTYVFbWrvT0Hs2YYVd6eo/KytpVU2Mb1tYrAGOP96FeAIggXbm5A2raHMyRkkLQBgAA9PFnByiTSbJae2S1siUKiDRk3ADAIKJLSz0GbaTemjcHtwoHAACRiw5QAPyBwA0AHMTV8tsb/VuFAwCAyJaX16n4eIfHMXSAAjBcBG4AoB9jfb1iCwuHdZvYwkK6SgEAADpAAfCLYdW4aWpq0j333DPsc42NjcOfGQAEgSM1Ve3l5YO2BHekpAzYPuU0mdReXk5XKQAA0NcBKivLrMZGg2y2rz4nt1gcSk520gEKwLANK3Dz4Ycfjihw43Q6ZTAMvwAXAARDd3a2JLkFb1zdo/pvo3IFbVzjAQAAXB2gqqujtHp1jFpaDEpIcCo/v1MZGT0EbQAMm9eBm/T0dIIvACJG/+BNR1FRX/co17+xhYUEbQAAwKDoAAXAl7wO3FRVVflzHgAQcrqzs2WfNWvANqiu3Fz1ZGSwPQoAAACA31GcGAA8GCo4Q9AGAAAAQCAQuAEAAAAAAAhRBG4AAAAAAABCFIEbAAAAAACAEEXgBgAAAAAAIEQRuAEAAAAAAAhRBG4AAAAAAABCFIEbAAAAAACAEEXgBgAAAAAAIEQRuAEAAAAAAAhRBG4AAAAAAABCFIEbAAAAAACAEEXgBgAAAAAAIEQRuAEAAAAAAAhRBG4AAAAAAABCFIEbAAAAAACAEEXgBgAAAAAAIEQRuAEAAAAAAAhRBG4AAADgNbtdqqqKktVq1ty5FlmtZlVVRcluD/bMAAAIT1HBngAAAADGhuZmg7KyzGpqMqi19avP/2prjUpKcqqysk2Jic4gzhAAgPBDxg0AAAAOyW6XsrLMqqszuQVtJKm11ai6OpOyssxk3gAA4GMEbgAAOARjff2wjgPhaMOGKDU1GTyOaWw0qLqahG4AAHyJwA0AAB6Mq6iQZfZsRZeWuh2PLi2VZfZsjauoCNLMIBFUC6SSkpgBmTYHs9mMWr06JkAzAgAgMhC4AYAIxMWud8ZVVCguJ0cGu11xBQV9wZvo0lLFFRT0Hs/JIXgTJATVAqulxXO2zXDHAQAA7xC4AYAIw8Wud/oHbVziCgoUP3Om4goK+o4RvAkOgmqBl5DgXdFhb8cBAADvELgBgAjCxa53jPX1A4I2fecaGgYcc33fyFgKDIJqwZGX16n4eIfHMRaLQ/n5nQGaEQAAkYHADQBECC52vedITVVHUdGwbtNRVCRHaqqfZgQXgmrBk5nZo6Qkz9k0yclOZWT0BGhGAABEBgI3ABABuNgdvq7cXLUXF3s1tr24WF25uX6eESSCasFkMkmVlW1KS7PLYnHPvLFYHEpLs6uysk0mU5AmCABAmCJwAwARgIvdkenKzZUjJcXjGEdKCkGbACOoFjyJiU7V1NhUVtau9PQezZhhV3p6j8rK2lVTY1NiIvVtAADwtahgTwAAEBiui9f+26KGwsVur+jS0kEzkvozNjQourSU71eAdeXmKmbtWo8/H4Jq/mEySVZrj6xWtkQBABAIZNwAQAQhg8R7roLN3uhf6BmBMZygGgAAwFhG4AYAIggXu94x1tcrtrBwWLeJLSyM6JpAgURQDQAARBICNwAQIbjY9Z4jNVXt5eVyDlJldbCMJafJpPby8oivCRQIBNUAAECkIXADABGAi93h687OHhC8aS8uVuuOHW6FcV1Bm+7s7GBMM+IQVAMAAJGGwA0ARAAudkemf/Cmf8FmV1cjgjbBQVANAABEEgI3ABAhuNgdme7sbNm2bx9QsLkrN1e27dv5PgUJQTUAABApaAcOABHEdREbl5OjjqIit4tdqXd7FBe7Aw2VeRTpGUnB1p2dLfusWQN+Dl25uerJyODnAwAAwgKBGwCIMFzsIpwQVAMAAOGOrVIAEIG42MVYNFSx7Eguog0AAMIfgRsAABDyxlVUyDJ79oA29dGlpbLMnq1xFRVBmhkAAIB/sVUKAACEtHEVFYrLyZHBbldcQYGk3q190aWlfV/H5eRIEvWZAABA2AnLjJuTTz5ZEyZMGPS/BQsWDBjf2dmpe+65R6eccoomT56sE088UTfeeKM++eSTIMweAMYG03vvDXqcbSvwpf5BG5e4ggLFz5zZF7SR1BvUyckh8wYAAISdsM24GT9+vHIPat0qSdOmTXP72uFwaPHixXr55Zc1e/ZsXXLJJdq9e7eeeOIJbd68WX/96181adKkQE0bAMaEwzdu1MSf/cytM5XUu22FzlTwFWN9/YCgTd+5hoYBx1zBm8GKbwMAAIxVYRu4SUhIUEG/T+KG8vTTT+vll1/W5ZdfrvLychkMBknSo48+qptuuklFRUVauXKln2cbWMb6emnq1EGP84cugEOJ+dOflPizn7FtBX7nSE1VR1GRW2bNoXQUFfFeBgAAwkpYbpUajieeeEKS9LOf/awvaCNJP/jBD3TMMcfoD3/4g9rb24M1PZ9zFXeMKy93O05xRwDeGFdRoYS8PLatIGC6cnPVXlzs1dj24mK3DDAAAIBwELaBm66uLq1bt06//vWvVVZWpn/84x8DxnR0dOgf//iHjj/++AFbqAwGg771rW+pra1Nb775ZqCm7Vf96wSMX7FCic88I0l9n5JzoQXAk5FuW6HmDUarKzdXjpQUj2McKSkEbQAAQFgK261Se/fuVV5entuxU045Rb/5zW907LHHSpLee+89ORwOpQ6RUu06vnv3bqWnp3t8vI6ODh/M2n9i/vQnxR30Kfm0++9Xzx/+oKjGxr5jrgutrq4udV56aRBmilDQ1dXl9i8gSZo6Vc4779T4FSu8vknrnXeqfepUKcRfI+E7/nj9iCsvHzQ42J+xoUGGVavU/uU2PYQm3l/gCesDnrA+4MlYWx+xsbHDGh+WgZurrrpKc+bM0fTp02U2m7Vr1y6VlJTo97//vS655BJt3bpV8fHx2r9/v6TeejiDGT9+vCT1jfNkz549sg/yKXQoiGls1EkHBW1c+gdtXAx2uxLy8vTvxER1JicHYooIUXv37g32FBBqMjOV+MUXmnb//Ycc+sFNN6k5M1Ma5HUG4c9Xrx+JzzyjyV6sN0kav2KF9n3xhZoXLfLJY8N/eH+BJ6wPeML6gCdjYX2YTKYhk0eGEpaBm9tuu83t62984xt6+OGHJUm///3v9fjjjys/P9+njzl1kGK/ISM5Wa0j+JQ88RBZRghfXV1d2rt3ryZPnqzo6OhgTwchpmvZMnX+7neK2bNnyDE906Yp5tZbReg38vjy9cP03nua+OCDw7pN8oMP6rArrpD9y+xahBbeX+AJ6wOesD7gSbivj7AM3AzlBz/4gX7/+99r27Ztys/P78uoaWlpGXS8K9PGNc6T4aY6BZrzhhvUHhXlVWeO9uJiOXNzFdrPCIEQHR0d8msbgRdXXu4xaCNJUR98oPG//S01RyKYT14/0tLUXl4+aG0lR0rKgO1TTpNJ7eXlGpeWpnGje2T4Ge8v8IT1AU9YH/AkXNdH2BYnHszEiRMlSQcOHJAkHXPMMTIajaofonCm6/hxxx0XmAn6GcUdAYxWdGmp19l7cQUFiikq8vOMEO66s7PVXl4up8nUd6y9uFitO3a4dZtyBW1oQQ8AAMJNRAVuXJ2lXB2k4uLidOqpp+q///2vPvjgA7exTqdTf/vb32Q2m/XNb34z4HP1h+jSUq+KO0aXlgZoRgDGEmN9vWILC4d1m5hf/YrXFIxa/+BN/5bfrlbhBG0AAEA4C7vAzbvvvtuXUXPw8TvvvFOSdPnll/cdv/rqqyVJd911l5xOZ9/x3/72t3r//fd1xRVXKC4uzr+TDgBXy29vxBUUcKEFYABHauqAzIdDMUiKLSzUuIoK/00MEaE7O1u27dsHZIV25ebKtn07QRsAABC2wq7GzfPPP681a9YoPT1dycnJOuyww7Rr1y699NJL6u7u1k033aS5c+f2jV+8eLH++Mc/6rnnnlNDQ4Pmzp2r+vp6vfjii0pJSVHhMD9dDkUj+ZQ8trBQPRkZcgyz2jWA8Nadna2uri4lDNGpbjAGu11xX7Zo5uIaozHUexLvVQAAIJyFXcbN/Pnzdf7552vXrl169tlntWbNGv3f//2fLrjgAlVUVOhnP/uZ23ij0ainn35at912mz799FOtWbNG27Zt05IlS/TSSy9p0qRJQXomvuPpU/KeL7eN9edKOecPYQCD6bz0UjXeeKOchx7axxW8MQ5RUwwAAADA4MIu42bevHmaN2/esG4TExOj2267bUAb8XDi+pS7f2eOD266STG33qrxv/1t3zYq6gQA8EbzokU63OFQ/MqVXt+mo6iIgDAAAAAwTGGXcYOh9S/uuP8Xv1DzokWSKO4IYGQO3HabW1cfT/oXlAUAIJzY7VJVVZSsVrPmzrXIajWrqipKXu4oBoBDCruMG3jWnZ0t+6xZap86VWps7DvelZtLTRsAw9aVm6uYtWs9dqxzpKQQtAEAhKXmZoOyssxqajKotfWrz8Rra41KSnKqsrJNiYnD2VwMAAORcROBKO4IwFeiS0s9Bm0kydjQQKc6AEDYsdulrCyz6upMbkEbSWptNaquzqSsLDOZNwBGjcANAGBE4srL++pjHXJsQQHBGwBAWNmwIUpNTQaPYxobDaquZpMDgNEhcAMAGLaYxkbF33nnsG4TW1hIVykAQNgoKYkZkGlzMJvNqNWrYwI0IwDhisANAGDYOpOT1VJSIqfJNOCcIyVlwDFX8XO2ZAIAwkVLi+dsm+GOA4ChELgBAIxI56WX9nWqc2kvLlbrjh1u3aboWAcACEcJCd4VHfZ2HAAMhcANAGDEurOz+4I3/Vt+d+Xmqr24mKANAAQZrar9Jy+vU/HxDo9jLBaH8vM7AzQjAOGKSlkAgFHpzs6WfdasAdugunJz1ZORwfYoAAgSWlX7V2Zmj5KSnKqrG3pMcrJTGRk9gZsUgLBExg3Qz1CFUymoCng2VHCGoA0ABAetqv3PZJIqK9uUlmaXxeKeeWOxOJSWZldlZZsGKQcHAMNC4Ab40riKCllmzx7Qsji6tFSW2bM1rqIiSDMDAAAYHlpVB0ZiolM1NTaVlbUrPb1HM2bYlZ7eo7KydtXU2MhoAuATvFID6g3axOXkyGC3K66gQFLvNo/o0tK+r+NyciSJWh2ADxnr6wfNyhnqOADAO8NpVW21spVnNEwmyWrt4fsIwG/IuEHE6x+0cYkrKFD8zJl9QRtJvUGdnBwybwAfIcsNCB62Boc/WlUDQPggcIOIZqyvHxC06TvX0DDgmCt4wx+2wOgcnOXmCt64stwIlAL+Q9A0MtCqGgDCB4EbRDRHaqo6ioqGdZuOoiK2cACjQJYbEDwETSMHraoBIHwQuEHE68rNVXtxsVdj24uL1ZWb6+cZAeGLLDcgeAiahg67XaqqipLVatbcuRZZrWZVVUX5tMOTq1W1J7SqBoCxgcANoN7gjSMlxeMYR0oKQRtglMhyA4KDoGnoaG42aN48i5YujdPWrVF66y2Ttm6N0tKlcZo3z6LmZt/UnKFVNQCEDwI3gHpTxAf7w7U/Y0PDgHoAAIaPLDcg8Aiahga7XcrKMquuzjSg41Nrq1F1dSZlZZl9lnlDq2oACA+0A0fE69/y+1D6twoHMHJdubmKWbvWY8CULDfAt1y/T9685xE09Y8NG6LU1OQ5o6ax0aDq6iiftZamVTUAjH1k3CCiGevrFVtYOKzbxBYWkjoOjBJZbkBwsDU4uEpKYgZk2hzMZjNq9eqYAM0IADAWELhBRHOkpqq9vFzOQTZ4D/aHrdNkUnt5OanjwDAcHOgcbpYbwRvAdwiaBldLi3f1a7wdBwCIDARuEPG6s7MHBG/ai4vVumOHWx0OV9CmOzs7GNMExqRxFRWyzJ7ddxFIlhsQPARNgy8hwbuaMt6OAwBEBgI3gNyDN/339buKqBK0AYavf+th10WgIzVV3QsXDjqeLDfAfwiahoa8vE7Fxzs8jrFYHMrP7wzQjAAAYwGBG+BL3dnZsm3fPmBff1durmzbtxO0AYahf9DGJa6gQPEzZyr6mWcGjO9atIgsN8CP2BocGjIze5SU5DmbJjnZqYwMCgkDcGe3S1VVUbJazZo71yKr1ayqqiifdaFDaCNwA/Qz1B+o/OEKeM9YXz8gaNN3bojaGuOefVbG+nqy3AA/Ymtw8JlMUmVlm9LS7LJY3DNvLBaH0tLsqqxs0yDxNQARrLnZoHnzLFq6NE5bt0bprbdM2ro1SkuXxmnePIuam6mLFe4I3AAAfMqRmqqOoqJh3aajqKgvQEqWG+A/bA0OvsREp2pqbCora1d6eo9mzLArPb1HZWXtqqmxKTGR+jYAvmK3S1lZZtXVmQZ0pWttNaquzqSsLDOZN2EuKtgTAACEH9fFoDeFUPtfPLqQ5Qb4T3d2tuyzZg34PevKzVVPRga/fwFgMklWa4+sVrZEAUOx26UNG6JUUhKjlhaD4uPj9J3vtGrx4mDPLLA2bIhSU5PnjJrGRoOqq6N4TQljZNwAAPyiKzd30NoZ/TlSUgYEbQD4H1uDAYSywbYGvfFGtO644xide+4REbU1qKQkZkCmzcFsNqNWr44J0IwQDARuAAB+EV1aOmRNGxdjQwMthwEAQB9PW4MOHIjSO++Mi6itQS0t3gWpvB2HsYnADQDA56JLS73aJiWpr1U4AADAcLYGRYKEBO/qXnk7DmMTgRsAgE8Z6+sVW1g4rNvEFhbKWF/vpxkBAMYKu136y1+iaXkcwdga5C4vr1Px8Q6PYywWh/LzOwM0IwRDZIQpAQAB40hNVXt5+aAtwR0pKQO2T7m62FBbAwAi2yefGLV48XQ1N8fKZvvqwr221qikJKcqK9vouhUB2BrkLjOzR0lJTtXVDT0mOdmpjAwKE4czMm4AAD7Xv+WwS3txsVp37FB7cXHfMVoPAwCk3kybyy+foPr6w9yCNhItjyMNW4PcmUxSZWWb0tLssljcM28sFofS0uyqrGxTvz+5EIYI3AAA/KJ/8KZ/y++u3P/f3r3HRV3m/R9/cxBFQDQN88TJNA95XjyXWSYpVi7lvbmu1d4ubeMhD91WJpprFFmauoqUblaWnXYjD8lmHlYLzUOtx1xvV1CUPOQvAwOBAYbfH94zyzgDggLzZeb1fDx6GN/vNTPX4Mdh5s31/Vwm5ScmEtoAAGy++MJXP/xQ8SdPT+pr4sm4NMhRSEip0tJytXx5vvr3L1bnziXq379Yy5fnKy0tl5VoHoBXPrgd74wMp5dclHccQM0pio1VSffuDv/2zCaTiqOj+TcJAJB0pa/J1SttrmbtazJ8OJeEuDMuDXLOx0caPryY+vdQrLiBW6mXkqLAqCiHHWr8kpMVGBWleikpLpoZ4LnKC2cIbQAAVvQ1gVVFlwY1bFisDh2KuDQIHocVNx7O58QJqWNHh+N1cXVKvZQUWzNU6zbEZpPJblti/7g4SeLSDAAAAAOhrwnKsl4atHGjr5Yura+cHC8FBZXo4YczNXp0IwUENHD1FIFaxYobD9bkyy/VdOBAt1idUja0sfKfMUNB3brZQhtJV0KduLg69dwAAADc3YQJhQ6rK67maX1NPJ310qDU1Dzt2JGrNWt+1qBBOay0gUciuPFQ9desUeTs2bbVKdbwxro6pS4FHN4ZGU63HZbksO2w9J/wxjsjozamBwAAgGu4775itWpV8ZZRntjXBAAkghuPVC8lRcETJrjN6hRLZKQKEhKqdJuChIQ6dykYAACAu/Lxkf72t2xFRl5my2MAuAo9bjzM9a5OcbYrjJFYtxkuGzyVp+y2xAAAADCGm2+26IMPjuh//7et3nwzSDk5XgoOLtXEiYWKji4mtAHgsVhx42HceXWK2WSSJSyswjGWsDBCGwAAAIPy8ZGio822viapqXkaPpzQBoBnI7jxQGaTSZdefLFSY2tjdUp5vWaq2oPGLznZ6aohu/vMzHRoxgwAAADUlpISacMGXw0fHqABAwI1fHiANmzwlZMF8QAgieDGY+XHxamwZcsKx9TG6pR6KSkKjIq64Z2tym75fS1lmzEDAAAAteXHH700cGCgnnzSXzt3+ur77320c6evnnzSXwMHBurHH71cPcU6hyAMnoDgxkP5r1ih+mfOVDimplenlN3C+0Z2tvLOyFCD+PgqPXaD+Hh2lQIAAECtKSmRHnwwQP/6l49++cX+Y9gvv3jrX//y0YMPBhA4VAFBGDwFwY0H8ktOVqNZsyo1tqZWp5QNbco+1vXsbGWJjFT+ihUqdXLxs7OeN6U+PspfsaJO9O0BAACAe/jiC19lZVUcJJw+7aWNG9k/pjIIwuBJCG48jBFWp1zvzlYVzaEoNtYhvMlPTNQvBw4oPzHRdswa2hTFxt7gswAAwLiqq38cgOqTlFTfIWC4Wm6ut5YurV9LM6rbCMLgSQhuPIwRVqfU1M5WZcObsk2VzSaT8hMTCW0AAB6huvrHAe6utgPOnJzKXbZT2XGejiAMnoTgxgMVxcYqJynJpatTrGFKZVRlZ6ui2Fjl7t3rMN5sMil3715CGwCoZaz8qF3V1T8OcHeuCDiDg0urdZynIwiDJyG48VCFI0cqY+5cl65OMZtMTlf5lHU9O1uVtzKHnjYAULtY+VG7qrN/HODOXBVwTphQqKAgS4VjAgMtmjixsFof110RhMGTENx4sJ+HDtVPaWkuW53il5zstKdNWTW9sxUAoGbUX7OGlR+1qCb6xwHuyJUB5333Fat164pDhDZtShUdXVxtj+nOCMLgSQhuPFxJRITT4zW9OsX6xr0yampnKwBAzWjy5ZcKnjCBlR+1qKb6xwHuxNUBp4+PtHZtnjp2LFFgoH3gEBhoUceOJVq7Nk9OWlHCCYIweBKCG9Q6I+xsBQCoGT4nTihy9mxWfrhATfWPA9yFEQLOkJBSpaXlavnyfPXvX6zOnUvUv3+xli/PV1parkJCuKynsgjC4EkIblDrjLCzFQCgZpREROj05MlVug0rP6pPTfWPA9yFEQJOHx9p+PBipabmaceOXKWm5mn48GIChutAEAZPQXADlyi7dbdVbe9sBQCoGT+OHq1LL75YqbGs/Khe9I8Dro2A070QhMETENzAZcqGN67a2QoAUDPy4+L4YFTL6B8HVA4BJ4C6huAGLlUUG6vcvXtdtrMVAKBm+K9YwQejWkT/OOMr73vN30HtIuAEUBcR3MDlyutrQL8DAKibQj78UI1mzarUWD4YVQ/6xxlbvZQUBUZFOdS6X3KyAqOi2FmtlhBwAqirCG4AAEC18TlxQm0WL67SbfhgVD3oH2dM9VJSbFtQlw0qrSs/rDurEd7UPAJOAHUVwQ0AAKg2JRERypg7lw9GLkL/OGMpG9pY+c+YoaBu3ewu1yG8qT0EnADqIoIbAABQrX4eOlQ5SUl8MHIR+scZg3dGhkNoYzvnpP+TNbxh9VnNI+AEUNcQ3AAAgGpXOHIkH4yqWVWa29I/zvUskZEqSEio0m0KEhL4O6olBJwA6hKCGwAAUCP4YFR9aG5bN1mDysooG3CidhBwAqgrCG4AAECN4YPRjaO5bd1mNpmc9ncqyxIWRmgDACgXwQ0AAIBB0dy27vNLTnba06Ys78xMh9VUAABYEdwAAAAYEM1t6z7rqqjKKLuaCrWrKv2jAMAVCG4AAAAMiOa2dZt3RoYaxMdX6TYN4uMJC2oZ/aMA1AUENwAAAAZFc9u6yxIZadtZzeGck5431p3WCN5qD/2jANQVBDcAAAAGRnPbuqsoNtYhvMlPTNQvBw7YBXLW0Iad1moP/aMA1CUENwAAAAZGc9u6rWx4U3ZVlHU1FaFN7aN/FIC6huAGAADAoGhu6x6KYmOVu3evw6oos8mk3L17CW1qGf2jANQ1HhPcLFq0SI0bN1bjxo21d+9eh/OXLl3S888/r9tvv10hISHq0qWLZs2apdzcXBfMFgAAeDqa27qX8j70Ewa4Bv2jANQlHhHcHDlyRImJiQoICHB6Pi8vTzExMVq2bJnat2+v8ePHq127dlqyZIkeeOABFRQU1PKMAQCAp6O5LVCz6B8FoK5w++CmqKhIJpNJXbp0UUxMjNMxixcv1qFDhzRlyhSlpKRozpw5SklJ0ZQpU/TPf/5Ty5Ytq+VZAwAA0NwWqEn0jwJQV7h9cDN//nwdPXpUS5culY+T31iVlpbqvffeU2BgoKZPn253bvr06QoMDNSqVatqa7oAAAB2aG4LVD/6RwGoS9w6uNm/f78WLFigZ599Vh06dHA6Jj09XWfPnlWfPn0cLqUKCAhQnz59dPLkSWVlZdXGlAEAABzQ3BaoPvSPAlDX+Lp6AjWlsLDQdonU5MmTyx2Xnp4uSYos53rwyMhIbdmyRenp6WrdunW591PX+uCYzWa7P4GyqA9UhPqoPj4nTqgkIqLSx+sC6qMGtWwpOXu/Ud5xA6I+UJFaq4+WLVWSlKTgCRMctgQvDg2V76lTdsdKfXyUk5Skwjr0b80d8fqBitS1+mjQoEGVxrttcPPyyy8rPT1d27Ztc3qJlNWlS5ckScHBwU7PN2rUyG5cec6cOaOSq17464Lz58+7egowMOoDFaE+bkyTL79U5OzZOj15sn4cPdp2POTDD9Vm8WJlzJ2rn4cOdeEMbwz1gYpQH6hIrdRHr15qMneuImfPtoU3p6ZN04+jRyvkww8V+vrrkq6ENhlz5+rnXr2k06drfl64Jl4/UJG6UB8+Pj7lLhwpj1sGN3v27NGSJUv03HPPqVOnTrXymC1btqyVx6kuZrNZ58+fV/PmzeXn5+fq6cBgqA9UhPq4cfXXrFHw/31YCH39dTVu0kT5cXHyX7FCjf7vw0Lk7NnKadpUhSNHunayVUR9oCLUBypS6/UxbpxymjZV8IQJ+mXOHNWPi1MbSXrmGV1q0kRBc+YoJylJgSNHKrDmZ4Nr4PUDFXH3+nC74Ka4uFgmk0mdO3fW1KlTrzneuqImJyfH6XnrShvruPJUdamTUfj5+dXZuaPmUR+oCPVxfeqlpMj/quX5jWbNUuBf/mK3u4lXSYmCJ0xQvp9fnexfQn2gItQHKlKr9fHII8rt3VulkZEq+4ilkyYpNyZGXlcdh+vx+oGKuGt9uF1wk5uba+tbc/PNNzsdc++990qS3n//fVvT4oxymo1Zj7dt27a6pwoA8DDeGRnyj4tz6KkgyemWtF4lJfKPi1NJ9+6yVHFJLQCgcsp7feV1F1XlnZHhtG7KOw5UltsFN/Xr19fYsWOdntu5c6fS09M1bNgwNWvWTKGhoWrbtq1atGih3bt3Ky8vz25nqby8PO3evVthYWEVNiYGAKAyLJGRKkhIqPQWtJJUkJDAmz0AAAyuXkqK/OPiVJCQYLcDoF9yshrExyt/xYo6uYIWxuB2wY2/v7+WLFni9JzJZFJ6erqmTZumqKgo2/GxY8fq1Vdf1WuvvaY5c+bYjr/22mvKzc3VtGnTanraAAAPYX0zV5nwJj8x0WH7ZwAAYCzW0MarpMT2891sMskvOdn2tX9cnCQR3uC6uF1wcz0mT56s1NRULVq0SAcPHlS3bt104MABbd26VT179pSJN80AgGpkNplU/403nF4eZWUJCyO0AQDA4MqGNlb+M2Y4/Jy3Xv4sEd6g6rxdPQEjCAgI0IYNG2QymXTs2DEtXbpUx44d08SJE7V27Vr5+/u7eooAADfil5xcYWgjXel545ecXEszAgAAVXW9veu8y+mvCpTHo4Kb5ORkZWdn210mZRUcHKzExEQdPnxYFy5c0OHDh5WQkKCgoCAXzBQA4K7KLpu+Fv8ZMwhvAAAwKGvvuqqo7d515YVEhEd1i0cFNwAAuJJ3RoYaxMdX6TYN4uN5cwUAgEGZTSblJyZWamxt966rl5KiwKgoh18C+SUnKzAqSvVSUmptLrgxBDcAANQSS2Sk8lesUKmPj+O5sDCHY6U+PspfsYJdpQAAMDCzyeT053hZtd277uqGydbwxrry13rZFuFN3UBwAwBALSqKjXUIb/ITE/XLgQN2v7GzhjY0MAQAwNiM1ruuvIbJQd262V2uTXhTdxDcAABQy8qGN2WXTVuXWxPaAABQNxitdx0Nk90TwQ0AAC5QFBur3L17HZZNm00m5e7dS2gDAIDBGbF3XV1omIyqI7gBAMBFynuTxJsnAACMz6i964zcMBnXh+AGAAAAAIDrYNTedUZsmIzrR3ADAAAAAMB1MmLvOqM1TMaN8XX1BAAAAAAAqMuKYmNV0r27w2VQZpNJxdHRtXoZdFUbJkti5Y3BseIGAAAAAIAbZITedUZsmIwbR3ADAAAAAIAbMGrDZNwYghsAAAAAANyEURsm4/rR4wYAAAAAADdiDWP84+JUkJBg1zBZunJ5FKFN3UFwAwAAAACAmzFSw2TcGC6VAgAAAADADRmhYTJuHMENAAAAAACAQRHcAAAAAAAAGBTBDQAAAAAAgEER3AAAAAAAABgUwQ0AAAAAAIBBEdwAAAAAAAAYFMENAAAAAACAQRHcAABQzbwzMqp0HAAAACgPwQ0AANWoXkqKAqOi5JecbHfcLzlZgVFRqpeS4qKZAQAAoC7ydfUEAABwF/VSUuQfFyevkhL5z5ghSTKbTPJLTrZ97R8XJ0kqio112TwBAABQdxDcAABQDcqGNlb+M2ao/htvyDsz03bMq6SE8AYAAACVxqVSAADcIO+MDIfQxnauTGhjZQ1v6HkDAACAayG4AQDgBlkiI1WQkFCl2xQkJMgSGVlDMwIAAIC7ILgBAKAamE0m5ScmVmpsfmKizCZTDc8IAAAA7oDgBgCAamI2mWQJC6twjCUsjNAGAAAAlUZwAwBANfFLTnba06Ys78xMh63CAQAAgPIQ3AAAUA3Kbvl9Lf4zZhDeAAAAoFIIbgAAuEHeGRlqEB9fpds0iI9nVykAAABcE8ENAAA3yBIZqfwVK1Tq4+N4zknPm1IfH+WvWMGuUgAAALgmghsAAKpBUWysQ3iTn5ioXw4csNttyhraFMXGumKaAAAAqGN8XT0BAADchTWM8Y+LU0FCgm33KOufDeLjCW0AAABQJQQ3AABUo6LYWJV07+5wGZTZZFJxdDSXRwEAAKBKuFQKAIBqVl44Q2gDAACAqiK4AQAAAAAAMCiCGwAAAAAAAIMiuAEAAAAAADAoghsAAAAAAACDIrgBAAAAAAAwKIIbAAAAAAAAgyK4AQAAAAAAMCiCGwAAAAAAAIMiuAEAAAAAADAoghsAAAAAAACDIrgBAAAAAAAwKIIbAAAAAAAAgyK4AQAAAAAAMCiCGwAAAAAAAIMiuAEAAAAAADAoghsAAAAAAACDIrgBAAAAAAAwKIIbAAAAAAAAgyK4AQAAAAAAMCiCGwAAAAAAAIMiuAEAAAAAADAoghsAAAAAAACDIrgBAAAAAAAwKIIbAAAAAAAAgyK4AQAAAAAAMCiCGwAAAAAAAIMiuAEAAAAAADAoghsAAACgFnlnZFTpOADAsxHcAAAAALWkXkqKAqOi5JecbHfcLzlZgVFRqpeS4qKZAQCMytfVEwAAAAA8Qb2UFPnHxcmrpET+M2ZIkswmk/ySk21f+8fFSZKKYmNdNk8AgLEQ3AAAAAA1rGxoY+U/Y4bqv/GGvDMzbce8SkoIbwAAdrhUCgAAAKhB3hkZDqGN7VyZ0MbKGt7Q8wYAIBHcAAAAADXKEhmpgoSEKt2mICFBlsjIGpoRAKAucbvgpqCgQM8//7yGDRumDh06qHnz5mrfvr2io6P1/vvvq6ioyOE2ly5d0vPPP6/bb79dISEh6tKli2bNmqXc3FwXPAMAAAC4G7PJpPzExEqNzU9MlNlkquEZAQDqCrcLbvLy8rRy5Up5eXlp6NChmjBhgkaMGKEzZ85o4sSJ+s1vfiOLxWI3PiYmRsuWLVP79u01fvx4tWvXTkuWLNEDDzyggoICFz4bAAAAuAuzySRLWFiFYyxhYYQ2AAA7btecuEmTJjp16pT8/PzsjhcXF2vkyJHaunWrNm3apOjoaEnS4sWLdejQIU2ZMkVz5syxjZ8zZ44WLVqkZcuWadq0abX5FAAAAOCG/JKTnfa0Kcs7M1N+ycmENwAAG7dbcePt7e0Q2kiSr6+vRowYIUnK+L9Gb6WlpXrvvfcUGBio6dOn242fPn26AgMDtWrVqpqfNAAAANxa2S2/r8V/xgz5JSfX8IwAAHWF2wU35bFYLNqyZYskqVOnTpKk9PR0nT17Vn369FFAQIDd+ICAAPXp00cnT55UVlZWrc8XAAAA7sE7I0MN4uOrdJsG8fHsKgUAkOSGl0pZmc1mLViwQKWlpfr555+1fft2HTt2TGPGjNGgQYMkXQluJCmynI79kZGR2rJli9LT09W6desKH6+u9cIxm812fwJlUR+oCPWBilAfqIjH1kfLlipJSlLwhAkOW4IXh4bK99Qpu2OlPj7KSUpSYcuWUh17j3kjPLY+UCnUBypS1+qjQYMGVRrv1sHNvHnzbF97eXlp0qRJeuGFF2zHLl26JEkKDg52eh+NGjWyG1eRM2fOqOSqH8R1wfnz5109BRgY9YGKUB+oCPWBinhkffTqpSZz5ypy9mxbeHNq2jT9OHq0Qj78UKGvvy7pSmiTMXeufu7VSzp92pUzdhmPrA9UGvWBitSF+vDx8Sl38Uh53Da4CQwMVHZ2tiwWi86ePasvvvhCc+fO1d69e/XJJ5/YQpnq0rJly2q9v5pmNpt1/vx5NW/e3GlPIHg26gMVoT5QEeoDFfH4+hg3TjlNmyp4wgT9MmeO6sfFqY0kPfOMLjVpoqA5c5STlKTAkSMV6Oq5uoDH1wcqRH2gIu5eH24b3Fh5e3urVatWGjdunJo2barHH39cCxYs0J/+9CdbeJOTk+P0ttaVNpUJeaq61Mko/Pz86uzcUfOoD1SE+kBFqA9UxKPr45FHlNu7t0ojI1X2O1A6aZJyY2LkddVxT+TR9YFroj5QEXetD49pTixJgwcPliSlpaVJktq2bSvpP7tMXc163DoOAAAAuFGWcpbIl3ccAODZPCq4OXfunCSpXr16kq4EMi1atNDu3buVl5dnNzYvL0+7d+9WWFjYNRsTAwAAAAAA1AS3C26OHj2qy5cvOxy/fPmyZs6cKUm69957JV1pWDx27Fjl5ubqtddesxv/2muvKTc3V4899ljNTxoAAAAAAMAJt+tx89lnn2nZsmXq27evQkNDFRQUpDNnzmjz5s26ePGi+vXrp/Hjx9vGT548WampqVq0aJEOHjyobt266cCBA9q6dat69uwpk8nkwmcDAAAAAAA8mdsFN/fdd5/OnTunPXv2aM+ePcrLy1OjRo3UuXNnPfTQQ/rd734nX9//PO2AgABt2LBBr7zyitavX6+vv/5azZs318SJE/Xss8/K39/fhc8GAAAAAAB4MrcLbnr06KEePXpU6TbBwcFKTExUYmJiDc0KAAAAAACg6tyuxw0AAAAAAIC7ILgBAAAAAAAwKIIbAAAAAAAAgyK4AQAAAAAAMCiCGwAAAAAAAIMiuAEAAAAAADAoghsAAAAAAACDIrgBAAAAAAAwKIIbAAAAAAAAgyK4AQAAAAAAMCiCGwAAAAAAAIMiuAEAAAAAADAoghsAAAAAAACDIrjxYD4+Pq6eAgyM+kBFqA9UhPpARagPVIT6QEWoD1TEnevDKzs7u9TVkwAAAAAAAIAjVtwAAAAAAAAYFMENAAAAAACAQRHcAAAAAAAAGBTBDQAAAAAAgEER3AAAAAAAABgUwQ0AAAAAAIBBEdwAAAAAAAAYFMGNmykoKNDzzz+vYcOGqUOHDmrevLnat2+v6Ohovf/++yoqKnK4zaVLl/T888/r9ttvV0hIiLp06aJZs2YpNzfXBc8ArrBo0SI1btxYjRs31t69ex3OUyOeo0uXLrZauPq/mJgYh/GFhYWaN2+eevbsqebNm6tDhw6aPHmyLly44ILZo7asX79eI0eOVEREhJo3b66uXbtq3LhxysrKshvHa4fnWL16dbmvHdb/HnjgAbvbUB+epbS0VOvWrdOIESN02223qUWLFvrVr36lKVOm6OTJkw7jqQ/PYrFYtHz5ct15551q0aKF2rRpo2HDhik1NdXpeOrDPX388ceaMmWK7rrrLoWEhKhx48ZavXp1ueOrWgcWi0Vvvvmm+vfvr1tuuUVt27bVuHHjnL4GGY1XdnZ2qasngerz008/qXPnzurZs6duvfVWNWvWTNnZ2dq0aZNOnz6tu+++W3/729/k7X0ls8vLy9N9992nQ4cO6e6771bXrl118OBBbd26VT179lRqaqoaNGjg4meFmnTkyBENHjxYvr6+ysvL06ZNmxQVFWU7T414li5duignJ0cmk8nhXGhoqMaMGWP72mKxaNSoUdqyZYuioqI0YMAApaen6/PPP1dYWJg2b96sZs2a1eb0UcNKS0s1depUvfPOO4qIiNA999yjwMBAnT17Vjt27NCKFSvUr18/Sbx2eJqDBw9qw4YNTs+tW7dO//rXv/SnP/1JkydPlkR9eKKZM2cqKSlJt9xyi4YPH66goCAdPnxYW7duVWBgoDZu3KhOnTpJoj48TWlpqR577DGtW7dOERERGjJkiMxms1JTU3XhwgW9+uqreuKJJ2zjqQ/31aVLF50+fVpNmzZVw4YNdfr0aSUlJdm9/7S6njp46qmntGrVKnXs2FFDhw7V2bNntWbNGgUEBGjz5s1q27ZtbT3VKvN19QRQvZo0aaJTp07Jz8/P7nhxcbFGjhyprVu3atOmTYqOjpYkLV68WIcOHdKUKVM0Z84c2/g5c+Zo0aJFWrZsmaZNm1abTwG1qKioSCaTSV26dFFkZKQ++eQThzHUiOcJDg7WjBkzrjnugw8+0JYtW/Twww9rxYoV8vLykiStXLlS06ZNU0JCghYtWlTDs0VteuONN/TOO+/oD3/4g+bNmycfHx+788XFxbb/57XDs3Tt2lVdu3Z1OG42m7VixQr5+vpq9OjRtuPUh2c5f/68kpOT1aZNG6WlpSk4ONh2LikpyRbqJCUlSaI+PM26deu0bt069e3bV5999pn8/f0lSbNnz9Zdd92lWbNmKTo6WmFhYZKoD3e2ZMkSRUZGKjQ0VAsXLtSf/vSncsdWtQ6++uorrVq1Sv3799eaNWtsn5dHjRqlUaNGafr06UpJSamx53ajuFTKzXh7ezuENpLk6+urESNGSJIyMjIkXUm333vvPQUGBmr69Ol246dPn67AwECtWrWq5icNl5k/f76OHj2qpUuXOnwAk6gRVMz6dz979mxbaCNJv//97xUeHq6//vWvys/Pd9X0UM3y8/M1b948hYeH65VXXnH6muHre+X3Qbx2wGrDhg26ePGioqOjFRISIon68ESnTp2SxWJR37597UIbSbrvvvskSf/v//0/SdSHJ7Ku1ps2bZottJGkpk2bavz48SosLLRdLkN9uLe77rpLoaGh1xx3PXVg/XrmzJl2n5fvvfdeDRw4UFu3btXp06er4VnUDIIbD2GxWLRlyxZJsi1DTU9P19mzZ9WnTx8FBATYjQ8ICFCfPn108uRJh54FcA/79+/XggUL9Oyzz6pDhw5Ox1AjnslsNmv16tVasGCBli9frm+//dZhTEFBgb799lu1a9fO4Qesl5eXBg8erLy8PO3bt6+2po0atnXrVmVnZysmJkYlJSVat26dFi5cqJUrV9p+IWDFawesrG+UH330Udsx6sPztG3bVn5+ftq1a5cuXbpkd+6LL76QJA0aNEgS9eGJfvzxR0myragpy3rs66+/lkR94IrrqYO0tDQFBASob9++Dvd3zz33SJJ27NhRsxO/AVwq5abMZrMWLFig0tJS/fzzz9q+fbuOHTumMWPG2P1glKTIyEin9xEZGaktW7YoPT1drVu3rrW5o+YVFhbaLpGy9htwhhrxTOfPn9eECRPsjvXs2VNvvfWWIiIiJEknTpyQxWKpsDakKzXUv3//mp0wasX+/fslST4+PhowYICOHz9uO+ft7a3x48crISFBEq8duOLUqVPavn27WrVqpSFDhtiOUx+e56abbtILL7yg+Ph49e7d267HzVdffaU//OEPth4m1Ifnadq0qSQpMzNTt912m925zMxMSbL9zKE+IFW9DvLy8nTu3Dl16tTJ6Yrhsu9bjYrgxk2ZzWbNmzfP9rWXl5cmTZqkF154wXbM+huPq5esWjVq1MhuHNzHyy+/rPT0dG3bts3pi5cVNeJ5xowZo379+qlTp04KCAjQ8ePHlZSUpI8//lgPPPCAdu7cqaCgIGrDA1kvY0hKSlK3bt20detWtW/fXgcPHtSUKVO0dOlSRUREaNy4cdQHJF3ZacpisWj06NF2P2uoD880YcIEtWzZUk899ZRWrlxpO96vXz89/PDDtkstqQ/PM2TIEH366adauHCh7rzzTltD2YsXLyo5OVmSlJOTI4n6wBVVrQPrn9bj1xpvRFwq5aYCAwOVnZ2tixcv6vvvv9f8+fO1atUqjRgxwtAFiZq3Z88eLVmyRP/zP/9ju2wOsHruuec0aNAg3XzzzWrYsKG6du2qN998U7/5zW90+vRpvfvuu66eIlzEYrFIkvz8/LR69Wr17NlTgYGB6t+/v9555x15e3tr6dKlLp4ljMJisWj16tXy8vLS7373O1dPBwYwb948PfHEE5o2bZq+//57ZWVl6e9//7sKCgo0YsSIcrd9hvsbNWqU7rjjDn3zzTfq37+/pk+frqlTp6pv374KCgqSJNuOuICn4l+Am/P29larVq00btw4LV68WLt27dKCBQsk/SdZtCbYV7tWMom6p7i4WCaTSZ07d9bUqVOvOZ4agdXvf/97SdLu3bslURueyPp32b17d7Vo0cLuXKdOnRQeHq4TJ04oOzub+oC2bdumrKws3XnnnQoPD7c7R314nm3btikxMVFxcXGaOnWqWrVqpcDAQPXr108fffSR6tWrp/j4eEnUhyfy9fXV3/72Nz333HPy9vbWu+++q/Xr12v48OG2PlnNmjWTRH3giqrWwbVW1NSFuuFSKQ8yePBgSVcaM0my7VN/dVNJK+txI+9nj6rJzc21Xbt58803Ox1z7733SpLef/99W9NiagTW688vX74sSQoPD5e3tze14UHatWsnqfxlydbjBQUF/HyB06bEVtSH59m0aZMk6Y477nA417x5c7Vr104HDx5Ubm4u9eGh6tevr+eee07PPfec3XFrU+IePXpI4vUDV1S1DgICAnTLLbcoMzNTJSUlDq0i6kLdENx4kHPnzkmS6tWrJ+lKYbZo0UK7d+9WXl6eXUfuvLw87d69W2FhYTT2ciP169fX2LFjnZ7buXOn0tPTNWzYMDVr1kyhoaHUCGysO0tZd5Dy9/dXr169tHfvXp06dcpuZ6nS0lL94x//UEBAgO2NFuo+6weuY8eOOZwrKipSRkaGAgIC1KxZMzVv3pzXDg928eJFpaamqkmTJhoxYoTDeX62eB6z2SzpP72yrvbTTz/J29tb9erVoz5g569//ask6aGHHpLE6weuuJ46GDBggD799FPt2rVLAwYMsLs/6+7LRt5Qg0ul3MzRo0dtvxEv6/Lly5o5c6ak/6yo8PLy0tixY5Wbm6vXXnvNbvxrr72m3NxcPfbYYzU/adQaf39/LVmyxOl/vXv3liRNmzZNS5YsUdeuXakRD3Ps2DGnrx/Hjh3TnDlzJEkPP/yw7bj1737u3LkqLS21HX/77bd18uRJjRo1Sv7+/jU7adSaiIgI3X333crIyLCtprBauHChcnJyFBMTI19fX147PNxHH30ks9ms//qv/1L9+vUdzlMfnse6/e6yZcscLm1YuXKlfvjhB/Xu3Vv169enPjyUs0tY1q5dq/fff189e/bU/fffL4nXD1xxPXVg/fqll16yhcnSlRWBaWlpuvvuu+1+EWk0XtnZ2aXXHoa6IjExUcuWLVPfvn0VGhqqoKAgnTlzRps3b9bFixfVr18/paSk2D5M5eXlKTo6WocPH9bdd9+tbt266cCBA9q6dat69uypDRs28MHLQ5hMJn344YfatGmToqKibMepEc9hff3o37+/2rRpo4YNG+r48ePatGmTioqKNG3aNM2ePds23mKxaNSoUdqyZYuioqI0YMAAZWRkaP369QoNDdWWLVts16TDPZw4cUJDhw7VhQsXFB0dbbu84auvvlKbNm20efNmNW/eXBKvHZ6sf//+OnLkiHbs2KHOnTs7HUN9eJaSkhLdf//92rlzp26++WYNGzZMwcHBOnDggL766iv5+/vr888/V69evSRRH56od+/eatWqldq3b68GDRrou+++U1pamsLDw7Vu3Tq7D9TUh/tatWqVvvnmG0nSkSNHdODAAfXt21cRERGSruxCZ70E93rq4KmnntKqVavUsWNHDR06VOfOndNnn32mgIAAbdq0SbfeemvtPuEqILhxM/v27dM777yjPXv26MyZM8rLy1OjRo3UuXNnPfTQQ/rd735n227RKicnR6+88orWr1+v8+fPq3nz5ho5cqSeffZZWyd3uL/yghuJGvEUaWlpeuutt3Tw4EFduHBBly9fVtOmTdWrVy/94Q9/0N133+1wm8LCQi1cuFAff/yxfvjhBzVp0kTR0dGKj49XSEiIC54FalpWVpZefvllbdmyRRcvXlTz5s01bNgwPfPMMw69s3jt8Dzfffed7rnnHvXq1cu29Lw81IdnKSws1LJly/TZZ5/p+PHjMpvNCgkJ0cCBA/X000/rtttusxtPfXiWxMRErV+/XqdPn1ZRUZHCwsJ0//3366mnnnLaMJb6cE/WzyPlGT16tG2LeKnqdWCxWLR8+XK9++67tku877rrLs2aNcsWDhkVwQ0AAAAAAIBB0eMGAAAAAADAoAhuAAAAAAAADIrgBgAAAAAAwKAIbgAAAAAAAAyK4AYAAAAAAMCgCG4AAAAAAAAMiuAGAAAAAADAoAhuAAAAAAAADIrgBgAAAAAAwKB8XT0BAABgfDExMdqxY0elxmZnZ9fsZAzq/Pnz2rZtm/bt26f9+/fr4MGDunz5stq0aaNDhw7d0H0XFRVp9erVWrNmjQ4fPqycnBw1bNhQzZo1U0REhPr27ashQ4aoe/fu1fNkAACAYRDcAACASmvdurVat27t6mkY0qeffqrnn3++2u/3woULeuihh3Tw4EFJUqNGjdSuXTv5+fnphx9+0ObNm7V582Z9/fXXWrt2bbU/PgAAcC2CGwAAUGljxozRjBkzXD0NQwoKCtKgQYPUo0cP9ejRQ6dPn1Z8fPwN3++kSZN08OBBhYSEaMGCBRo+fLh8fHxs50+cOKF169bpxIkTN/xYAADAeAhuAAAAqsHYsWM1duxY29effvrpDd/n+fPntXHjRknSq6++qvvvv99hTEREhCZPnnzDjwUAAIyJ5sQAAKBGFBcXa+jQoWrcuLF++9vfOh2zfft23XTTTWrWrJl2795tO15aWqpNmzZp+vTpuuOOO9S2bVuFhISoY8eOevTRR7Vz585yH7dx48Zq3LixMjMz9d133+mRRx5RZGSkWrVqpXvvvdcWhEjSuXPnNH36dN1+++0KCQlRjx49NH/+fJWUlFTfN+IGZGZmqrS0VJLUqVOn67qP0tJSff755xo9erQ6dOigkJAQtWvXTkOGDNGrr76qc+fOOdzm4sWLmjt3rvr166eWLVuqVatW6t+/v15++WXl5OQ4fZyYmBg1btxYq1ev1rlz5/T000+ra9euCgkJUUxMjN3YjIwMPf300+rVq5datGih1q1ba/DgwVq2bJkKCwuv63kCAOCuWHEDAABqhK+vr/7yl7/ojjvuUGpqqt5880398Y9/tJ2/cOGCnnjiCVksFs2cOVN9+vSxncvLy9OoUaPk5eWlpk2b6pZbblGLFi2UlZWldevWaf369VqwYIH++7//u9zH37hxo2bOnKmAgACFh4fr5MmT2rt3r0aPHq2VK1eqa9euGjFihH766Sd16NBBpaWlOnHihBISEnTu3DnNnz+/Rr8/lREUFGT7/127dql9+/ZVun1+fr7GjRun1NRUSdJNN92kzp07Kzs7WwcOHNC3336rVq1aacyYMbbbHD16VLGxsTpz5ox8fHxs35ujR4/qyJEj+uijj7RmzRpFRkY6fcwTJ05owIABys7O1m233abbbrtNfn5+tvOffPKJJk2apMLCQvn7+ysiIkKXL1/WgQMHtG/fPq1Zs0affvqp3XMHAMCTseIGAADUmNDQUP35z3+WJM2ePdvWYLe0tFRPPvmkzp8/rzvvvFNTp061u52fn58WLVqkI0eO6Pjx49qxY4fS0tKUnp6ut99+W/7+/nr22WeVlZVV7mPPnDlTzzzzjI4fP65t27bp+PHjGjNmjCwWi+Lj4xUXF6cePXro6NGj2r59u77//nvbXN966y2lp6fX0Hel8jp06KDw8HBJ0owZM5SYmKjvv/9eFoulUrefNm2aUlNTFRwcrHfffVfHjx/XP/7xD+3bt0+nTp3SG2+8YRfAFBYWauzYsTpz5ox+9atfaf/+/dqxY4d27typ7777TrfffrtOnTqlRx99tNxVSQsXLlSXLl30/fffa+fOnfr666/1wQcfSLoSPo0fP16lpaVKTExUZmamdu7cqf3792vPnj3q2bOn9uzZQx8lAADK8MrOzi519SQAAICxVXY78OHDh9s+pJc1depUvf3222rXrp22bdumt956S7Nnz1azZs2UlpamW265pUrzSUhI0Pz58zVnzhxNmTLF7lzjxo0lSUOHDtUnn3xid+7nn39Wx44dVVBQoJCQEP3zn/9UYGCg3ZjBgwdr3759SkxMlMlkqtK8yvr00081bty4G94OfNeuXfrNb35jd4lSYGCgunTpoqioKA0bNkz9+vVzuN3hw4c1cOBASdLatWs1aNCgaz7WRx99pCeffFJ+fn7at2+fWrVqZXf++PHj6tOnj0pKSvTuu+/qwQcftJ2z1kizZs303XffKTg42OH+77vvPu3atUsvvfSSJkyY4HA+KytLffr0UUFBgQ4fPqwWLVpcc84AALg7LpUCAACVdq3twDt06OD0eGJionbv3q0jR45ozJgx2rFjh7y8vLRs2bIKQ5vvvvtOn3/+uf73f/9XOTk5tlUeFy5ckCTbCh5nHnvsMYdjTZo0UWhoqI4dO6aHHnrIIbSRpB49emjfvn3KyMgo975rU9++fbVr1y4lJSUpJSVFZ86cUW5urr755ht98803+vOf/6zevXvrzTffVEREhO1269evlyT17t27UqGNJH355ZeSpJEjRzqENpJ06623atiwYfr888/15Zdf2gU3Vg8++KDT0ObMmTPatWuXfH199eijjzp9/NatW6tHjx5KS0vTjh079PDDD1dq3gAAuDOCGwAAUGnXux14gwYNtHLlSg0ePFjbtm2TJI0fP15Dhw51Or64uFgTJkzQxx9/XOH9Xrx4sdxz5fVgadasmY4dO1bheelKnx2jaNGi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",
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "positive = data[data['admitted'].isin([1])]\n",
    "negative = data[data['admitted'].isin([0])]\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.scatter(positive['exam1'], positive['exam2'], s=50, c='b', marker='o', label='Admitted')\n",
    "ax.scatter(negative['exam1'], negative['exam2'], s=50, c='r', marker='x', label='Not Admitted')\n",
    "ax.legend()\n",
    "ax.set_xlabel('Exam 1 Score')\n",
    "ax.set_ylabel('Exam 2 Score')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "2dp3JtvpjBYR",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def get_X(df):#读取特征\n",
    "#     \"\"\"\n",
    "#     use concat to add intersect feature to avoid side effect\n",
    "#     not efficient for big dataset though\n",
    "#     \"\"\"\n",
    "    ones = pd.DataFrame({'ones': np.ones(len(df))})#ones是m行1列的dataframe\n",
    "    data = pd.concat([ones, df], axis=1)  # 合并数据，根据列合并\n",
    "    return data.iloc[:, :-1].as_matrix()  # 这个操作返回 ndarray,不是矩阵\n",
    "\n",
    "\n",
    "def get_y(df):#读取标签\n",
    "#     '''assume the last column is the target'''\n",
    "    return np.array(df.iloc[:, -1])#df.iloc[:, -1]是指df的最后一列\n",
    "\n",
    "\n",
    "def normalize_feature(df):\n",
    "#     \"\"\"Applies function along input axis(default 0) of DataFrame.\"\"\"\n",
    "    return df.apply(lambda column: (column - column.mean()) / column.std())#特征缩放"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "mMuhs2-hjBYW",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 3)\n",
      "(100,)\n"
     ]
    }
   ],
   "source": [
    "def get_X(data):\n",
    "    # 假设data是一个DataFrame，包含特征列和一个额外的列名'ones'用于添加偏置项\n",
    "    ones = pd.DataFrame({'ones': np.ones(len(data))})  # ones是m行1列的DataFrame\n",
    "    data = pd.concat([ones, data], axis=1)  # 合并数据，根据列合并\n",
    "    return data.iloc[:, :-1].values  # 使用.values属性返回numpy数组\n",
    "def get_y(data):\n",
    "    # 假设data是一个DataFrame，包含目标列\n",
    "    return data.iloc[:, -1].values  # 使用.values属性返回numpy数组\n",
    "X = get_X(data)\n",
    "print(X.shape)\n",
    "\n",
    "y = get_y(data)\n",
    "print(y.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "8R0uQXSZjlH7"
   },
   "source": [
    "看起来在两类间，有一个清晰的决策边界。现在我们需要实现逻辑回归，那样就可以训练一个模型来预测结果。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "R_GK_8JhjlH8"
   },
   "source": [
    "## Sigmoid 函数\n",
    "$g$ 代表一个常用的逻辑函数（logistic function）为S形函数（Sigmoid function），公式为： \\\\[g\\left( z \\right)=\\frac{1}{1+{{e}^{-z}}}\\\\] \n",
    "合起来，我们得到逻辑回归模型的假设函数： \n",
    "\t\\\\[{{h}_{\\theta }}\\left( x \\right)=\\frac{1}{1+{{e}^{-{{\\theta }^{T}}X}}}\\\\] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "6yd5Ddl2jlH-",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def sigmoid(z):\n",
    "    return 1 / (1 + np.exp(-z))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "4SG4dpr3jlID"
   },
   "source": [
    "让我们做一个快速的检查，来确保它可以工作。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "FN4JMcM2jlIE",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABGkAAALsCAYAAABQuer6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACJI0lEQVR4nOzdd3hUZfrG8ftMy6QQQtFoqIIosoiuWAEFCYoCghKQAGtBd3/rqohl7YIiCroFy7qy61pWFGmBAIqiUlYERVdRsaM0KRIBSShhMu38/ojJAjMTUudM+X6uKxeZ5z3zzjN5RYab95xjFBcXmwIAAAAAAIClbFY3AAAAAAAAAEIaAAAAAACAmEBIAwAAAAAAEAMIaQAAAAAAAGIAIQ0AAAAAAEAMIKQBAAAAAACIAYQ0AAAAAAAAMYCQBgAAAAAAIAYQ0gAAAAAAAMQAQhoAAJLApEmTlJWVpf79+1vdStRlZWUpKytL7777riXP//LLL3X11VfrxBNPVLNmzZSVlaUePXrUaq54U9efHQAAycZhdQMAAACJauPGjbrooou0d+9eSVKTJk3kdDrVrFkzizurm6efflolJSXq37+/unTpYnU7AAAkDEIaAACSQLNmzdShQwe1bNnS6lairkOHDpKktLS0qL/2v//9b+3du1ft2rXTa6+9ppycnKj30BCmTJmizZs3q3Xr1lWGNFb+7AEAiEeENAAAJIH/+7//0//93/9Z3YYl/vvf/1r22l999ZUkqV+/fgkT0NSElT97AADiEdekAQAAaCClpaWSpPT0dIs7AQAA8YCQBgCAODR37lwNGTJEHTp0UPPmzdW6dWuddtppys/P17/+9S95PJ5Djq/OhYMXLlyoSy65RK1bt1aLFi3UvXt3PfHEE/L5fFU+v3///srKytKkSZPk9/v197//Xeeee65atGih448/XiNGjNDnn39eeXxpaan+/Oc/65xzzlFOTo6OO+44jRo1Shs2bKjyPRcVFWns2LE6++yzlZOTo5ycHJ199tkaN26cfvrpp4jPO9LFa4uLizV27Fideuqpys7O1oknnqirrrpKn376aZX9VOXkk09WVlaWVqxYIUl69NFHK/s4uJfqrMu7775b+bzDHf78d955R5dffrnat2+v7OxsnXnmmXrkkUdC/ns43M8//6xHH31Uubm5atu2rbKzs3XyySfrsssu03PPPaeSkpJDXm/z5s2SpBtuuOGQ93V4j0f62Xs8Hj399NO68MIL1aZNG2VnZ6tz5876/e9/rzVr1kTst+LnO23aNHm9Xj355JPq3r27cnJy1Lp1a11yySVavHhxle8ZAIBYxOlOAADEmRtuuEHTpk2rfJyRkSG/36/169dr/fr1WrRoUeVfeqvrvvvu01NPPVX5uHHjxvr22291//33680339Q555xzxDn8fr/y8vL0zjvvyOVyyel0aufOnXr99de1fPlyvfrqq2rTpo0uvfRSrVmzRm63W4ZhaPfu3SosLNSKFSu0dOlStWrVKmTuFStWaOTIkZVhQcXOlG+++UbffPONpk6dqunTp1erz4Nt2rRJAwYMqAwdXC6XDhw4oPnz5+uNN97Qv//97xrNV6F58+YqKyvT7t275fP5lJ6efshuGpfLVat5q/Lkk0/q/vvvlyRlZmbK6/Vq7dq1euSRR7Ry5UrNmzdPdrs95HlLly7VNddco+LiYkmSw+FQZmamtm/frs2bN2vZsmXKzs7WgAEDlJGRoaOPPlo7d+5UMBhUZmam3G53rfrdtm2bhgwZUnlKmNPpVGpqqrZs2aKZM2dq9uzZmjRpkn7/+99HnGP//v3q16+fPvroIzmdTqWkpGjPnj169913tWLFCj355JO64ooratUfAABWYCcNAABx5P3339e0adNks9k0fvx4bdiwQVu2bNG2bdu0fv16zZ07V8OHD69RCDBnzpzKgGbo0KH66quvtGnTJm3ZskVPPPGEVq9ereeee+6I8zz77LP6/PPP9eKLL2rr1q3asmWLli5dqrZt22rfvn266667dNNNN6m4uFhz587Vtm3btHXrVs2fP1/NmzfXjh07NGHChJB5t2zZUhnQdOzYUYsWLdLWrVu1detWvf766+rQoYOKi4s1YsQIbdu2rdrvOxAI6Oqrr9bmzZuVlZWlf//739q2bZt++OEHrVq1Sl27dtUf/vCHas93sGXLlmnt2rU688wzJUk33nij1q5dW/l11lln1WreSL744gs98MADuuWWW/T9999r06ZN2rRpk+644w5J5btxXnnllZDnffbZZxoxYoSKi4t10kknafbs2frxxx+1fv16bd++Xf/5z3904403qlGjRpKk0aNHa+3atWrRooWk8p01B7+vtWvXVqvfQCCgK6+8Ul999ZUy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Hj36iHNs3LhRubm5+vnnn5Wbm6uLLrpIe/fu1cKFC3Xddddp+fLlevrpp6PwbgAAAFDf3H/9q2y7doXUAx07ynv11dFvCACAGoqLkMbv92vMmDGy2WxauHChunTpIkm64447lJubqwkTJmjQoEFq3bp1lfP87W9/065duzRp0iT94Q9/qKyPGzdOPXr00CuvvKK77rrriPMAAAAgttg2bJDrH/8IO+Z56CHJERcfewEASS4uTndavny5NmzYoCFDhlQGNJLUuHFj3XrrrfJ6vZo+ffoR59m4caMk6cILLzyknpWVpXPOOUeS9PPPP9df4wAAAIgK97hxMny+kLqvTx/5+/SxoCMAAGouLkKaFStWSJJ69+4dMpabmytJWrly5RHnOemkkyRJb7311iH14uJirVq1StnZ2TrxxBPr2i4AAACiyL5ihZyvvhpSN+328l00AADEibjY97lu3TpJUvv27UPGsrOzlZGRofXr1x9xnptuukmLFi3SPffcoyVLluhXv/pV5TVpUlNT9fLLLys1NfWI83g8npq/CYt5vd5DfkXiY82TD2ueXFjv5MOaRxAMquk994QdOnDFFSpt21aKw89uEmuejFjz5MOaJz63212j4+MipNmzZ48kKTMzM+x4o0aNKo+pytFHH623335b//d//6e3335bixcvliSlpqZq1KhR6ty5c7X62bZtW9zeCaqoqMjqFhBlrHnyYc2TC+udfFjzQzV79VVlr1kTUvdnZGjtyJHyb95sQVf1izVPPqx58mHNE5Pdble7du1q9Jy4CGnqy/r165Wfn6/09HS98cYbOvnkk1VSUqJZs2bpoYce0tKlS/XGG2/IbrdXOU9OTk6UOq4/Xq9XRUVFys7OlsvlsrodRAFrnnxY8+TCeicf1jyUsX+/mv3zn2HHDtx2m449+eQod1S/WPPkw5onH9Ych4uLkKZiB02k3TJ79+5VVlbWEee5/vrrtXnzZn366afKzs6WJGVkZOiWW27RTz/9pClTpmjOnDm6/PLLq5ynptuVYonL5Yrr/lFzrHnyYc2TC+udfFjz/0n5619lD/Ovz4HjjlPw+uvlTkmxoKv6x5onH9Y8+bDmqBAXFw6uuBZNxbVpDlZUVKR9+/YdcQvR3r17tWrVKp1wwgmVAc3Bzj33XEnSmjDbZQEAABBbjC1blPLUU2HHPA8+KCVI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RZo7d64KCwuVk5Ojq6++Wtddd50yMjLq750AAAAkEVekuzpdfnmUOwEAAPWl2iHNunXrNG7cOL3xxhsyTVN2u129evVSt27ddPrpp6tLly5q0qTJIbtkPB6PNm3apI8++kgff/yx3nrrLW3dulUTJ07UM888o7vvvltXXXWVbDYujQMAAFBdtq++kv2zz0Lq/u7dZbZpY0FHAACgPlQ7pDn77LPl9/vVsWNHXXnllRoyZIiOOuqoKp/jdrt14okn6sQTT9TIkSNlmqZWrFihGTNmqKCgQLfddpt2796tW2+9tc5vBAAAIFm4Zs4MW/dywWAAAOJatUOa448/Xrfffrsuu+yyWl9TxjAMnXvuuTr33HN1zz33aPLkyeyiAQAAqIlAQM5Zs0LKptst36BBFjQEAADqS7VDmvfee69eL/jbokUL/fWvfz3kmjYAAACommvFCtl+/DGk7hswQMrMtKAjAABQX6q9jaWh7sjEnZ4AAACqzz17dti6j1OdAACIe5xrBAAAECds+/fLvXBhSD2YnS1/r17RbwgAANSrOoU0l1xyiS655BI99dRT1Tr+iiuu0MCBA+vykgAAAEmrybJlMg4cCKn7hg6VHNU+ix0AAMSoOv1pvmLFChmGoZUrV+rbb7/VY489JkcVHxA+/PBD7dixoy4vCQAAkLSavf562Dp3dQIAIDHU+XQnh8Mhm82madOmafDgwSouLq6HtgAAAHAw29atavTRRyH1QOfOCnbubEFHAACgvtU5pGnatKlmzJih9PR0rVixQhdccIE2bNhQH70BAADgF+65c2WEuSumd9gwC7oBAAANoV4uHNynTx+98cYbysnJ0ffff6/c3FytXLmyPqYGAACAaSp11qzQss1Wfj0aAACQEOrt7k6dO3fW4sWLdcopp2j37t0aPHiwpk2bVl/TAwAAJC37p5/K8d13IXV/794yjznGgo4AAEBDqNdbcB9zzDF64403dPHFF8vr9Wr06NEaP358fb4EAABA0nFOnx627uOCwQAAJJR6DWkkKTU1VdOmTdP1118v0zT1xBNP6Morr9SBMLeLBAAAwBF4vXLOmRNSNhs1kq9fPwsaAgAADaXeQxpJMgxDDz/8sCZPniy73a7XXntN/fr1I6gBAACoIcfixbLt2hVS9w0aJKWlWdARAABoKA0S0lQYNWqUZs6cqYyMDH322Wfau3dvQ74cAABAwnHNmBG27uVUJwAAEk6dQpqWLVuqRYsWVR7Tu3dvvfnmm0c8DgAAAIcydu+WY9GikHqwVSsFunWzoCMAANCQHHV58ueff16t40466SS98847+uqrr+rycgAAAEnFWVgow+sNqXuHDZNsDbohGgAAWKBOIU1NNG3aVD169IjWywEAAMQ9Z4RTnbirEwAAiYl/ggEAAIhBtnXr5Pjww5C6t2tXBY8/3oKOAABAQ6t2SDNv3rx6f/Ft27bpwzAfPgAAAJJdpF00nqFDo9wJAACIlmqHNKNGjVKPHj306quvyjTNOr3oli1bdPvtt+u0007TsmXL6jQXAABAwgkG5Zo5M7TscMgzaJAFDQEAgGio9jVphg4dqoKCAl111VXKzs5WXl6ehgwZolNOOUWGYRzx+Tt37tTrr7+u2bNn67333lMwGFSLFi24Tg0AAMBh7KtWyfbDDyH1knPPldmkiQUdAQCAaKh2SPPMM8/oD3/4g+699169//77evrpp/X0008rPT1dXbp0UefOndW8eXM1adJELpdLJSUl2r17tzZu3KiPP/5YmzdvliSZpqlGjRrplltu0fXXX6+UlJQGe3MAAADxyBXhVKdd/furUZR7AQAA0VOjuzv9+te/1uuvv66PPvpIzz33nObPn699+/bpvffe0/vvvx/2OQefGtW5c2eNGjVKl19+uTIyMurWOQAAQCI6cEDOMNcCDDZtqpJu3QhpAABIYLW6Bffpp5+u008/XX/605+0cuVKvffee/roo4+0fft27dy5U2VlZWratKmaNWumjh07qlu3burRo4dOOOGE+u4fAAAgoTjfeEPGnj0hdc+gQTKdTgs6AgAA0VKrkKZCo0aNdNFFF+miiy6qr34AAACSWqS7Oh3grk4AACS8at/dCQAAAA3LKCqSY8mSkHqgQwf5f/1rCzoCAADRREgDAAAQI5wFBTICgZC6Lz9fqsbdNAEAQHyr0+lON9xwQ42Od7vdaty4sTp27KhevXrp6KOPrsvLAwAAJJRId3XyXn55lDsBAABWqFNI88orr8iowb/qmKZZebzD4dDw4cP18MMPc6cnAACQ9GxffCH755+H1P3nniuzVSvJ47GgKwAAEE11Cmny8/NlGIbeeOMNFRcXKy0tTaeccopycnIkSdu2bdNnn32m0tJSNWnSRH379lVJ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I0dW1keMGKHCwkIVFBRo06ZN6t69u9avX69XX31Vbdq00X333WfF2wMAAAAAAIiPnTSSdN5552nRokU666yzVFhYqOeff15HH320nn/+eY0ePbpac9hsNr3yyiu66667tHPnTj399NP64IMPdMUVV+jtt99W8+bNG/hdAAAAAAAAhBcXO2kqdO3aVQUFBUc8bsqUKZoyZUrYsZSUFN11112666676rs9AAAAAACAWoubnTQAAAAAAACJjJAGAAAAAAAgBhDSAAAAAAAAxABCGgAAAAAAgBhASAMAAAAAABADCGkAAAAAAABiACENAAAAAABADCCkAQAAAAAAiAGENAAAAAAAADGAkAYAAAAAACAGENIAAAAAAADEAEIaAAAAAACAGEBIAwAAAAAAEAMIaQAAAAAAAGIAIQ0AAAAAAEAMIKQBAAAAAACIAYQ0AAAAAAAAMYCQBgAAAAAAIAYQ0iQRu91udQuIMtY8+bDmyYX1Tj6sefJhzZMPa558WHMczCguLjatbgIAAAAAACDZsZMGAAAAAAAgBhDSAAAAAAAAxABCGgAAAAAAgBhASAMAAAAAABADCGkAAAAAAABiACENAAAAAABADCCkAQAAAAAAiAGENHFqzZo1evDBBzV48GC1b99eWVlZ6t+//xGfN2vWLPXu3Vs5OTlq06aNhg0bpk8//bTGr799+3bdeOONOvHEE5Wdna3TTz9df/nLX+Tz+WrxblAXWVlZR/zasmVLteY6+eSTI85Rnf++EB2TJk2qcr03bdpUo/m+//57XX311WrXrp2OOeYYde/eXc8995xM02ygd4Ca8Pl8mj9/vq677jqdeeaZatGihVq2bKnc3Fw999xzCgQCNZqP3+exZfXq1Ro6dKhat26tnJwc9enTR4WFhTWao6ysTI8++qhOO+00ZWdnq2PHjhozZox27NjRQF2jNrZt26ann35al112mTp37qyjjjpKJ5xwgq644gp99NFH1Z7n3XffrfLPgGnTpjXgu0BN1ef/c+vrczwazrRp0474uXzgwIFHnIff58nNYXUDqJ2FCxdq8uTJcrlcOv7447Vr164jPucvf/mLHnroIbVq1UqjRo3Svn37NHfuXPXt21fz58/X2WefXa3XLioqUp8+fbR161YNGDBA7du318qVK/XQQw/p448/1iuvvCLDMOr6FlFNd955Z9j6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",
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nums = np.arange(-10, 10, step=1)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.plot(nums, sigmoid(nums), 'r')\n",
    "ax.set_xlabel('z', fontsize=18)\n",
    "ax.set_ylabel('g(z)', fontsize=18)\n",
    "ax.set_title('sigmoid function', fontsize=18)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "apEHwiQmvoH_"
   },
   "source": [
    "## Cost Function 代价函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "Zw3ZmdqVjlII"
   },
   "source": [
    "棒极了！现在，我们需要编写代价函数来评估结果。\n",
    "代价函数：\n",
    "$J\\left( \\theta  \\right)=\\frac{1}{m}\\sum\\limits_{i=1}^{m}{[-{{y}^{(i)}}\\log \\left( {{h}_{\\theta }}\\left( {{x}^{(i)}} \\right) \\right)-\\left( 1-{{y}^{(i)}} \\right)\\log \\left( 1-{{h}_{\\theta }}\\left( {{x}^{(i)}} \\right) \\right)]}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "R0Y4hVpkjlIJ",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def cost(theta, X, y):\n",
    "    return np.mean(-y * np.log(sigmoid(X @ theta)) - (1 - y) * np.log(1 - sigmoid(X @ theta)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "XEBSMFxujlIS"
   },
   "source": [
    "让我们来检查矩阵的维度来确保一切良好。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "6Ax8oM2AjlIT",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0.])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "theta = np.zeros(3)\n",
    "theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "8OY_-JQ8jlIX",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((100, 3), (3,), (100,))"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape, theta.shape, y.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ZZxmEmkwjlIa"
   },
   "source": [
    "让我们计算初始化参数的代价函数(theta为0)。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "fXdMxsdrjlIb",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6931471805599453"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cost(theta, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "SSGkYiVXjlIf"
   },
   "source": [
    "看起来不错，接下来，我们需要一个函数来计算我们的训练数据、标签和一些参数thata的梯度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "tI-AX8knjlIi"
   },
   "source": [
    "## Gradient descent 梯度下降\n",
    "* 这是批量梯度下降（batch gradient descent）  \n",
    "* 转化为向量化计算： $\\frac{1}{m} X^T( Sigmoid(X\\theta) - y )$\n",
    "$$\\frac{\\partial J\\left( \\theta  \\right)}{\\partial {{\\theta }_{j}}}=\\frac{1}{m}\\sum\\limits_{i=1}^{m}{\\left({h_{\\theta }}\\left( {{x}^{(i)}} \\right)-{{y}^{(i)}}\\right)x_{_{j}}^{(i)}}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "D1SA0lHXjlIj",
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Gradient的实现，利用的是循环的方法\n",
    "def gradient(theta, X, y):\n",
    "    theta = np.matrix(theta)\n",
    "    X = np.matrix(X)\n",
    "    y = np.matrix(y).T\n",
    "    print(\"X.shape = \", X.shape)\n",
    "    print(\"y.shape = \", y.shape)\n",
    "    print(\"theta.shape = \", theta.shape)\n",
    "    \n",
    "    parameters = int(theta.ravel().shape[1])\n",
    "    grad = np.zeros(parameters)\n",
    "    \n",
    "    error = sigmoid(X @ theta.T) - y\n",
    "    print(\"error.shape = \", error.shape)\n",
    "    \n",
    "    for i in range(parameters):\n",
    "        term = X[:,i].T @ error\n",
    "        grad[i] = term / len(X)\n",
    "    \n",
    "    return grad"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "brjL4gt34jMb",
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 另外一种实现的方法\n",
    "def gradient(theta, X, y):\n",
    "    return (1 / len(X)) * X.T @ (sigmoid(X @ theta) - y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "6TEJDxaqjlIr"
   },
   "source": [
    "注意，我们实际上没有在这个函数中执行梯度下降，我们仅仅在计算一个梯度步长。在练习中，一个称为“fminunc”的Octave函数是用来优化函数来计算成本和梯度参数。由于我们使用Python，我们可以用SciPy的“optimize”命名空间来做同样的事情。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "FoLQqZg7jlIt"
   },
   "source": [
    "我们看看用我们的数据和初始参数为0的梯度下降法的结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "twQhHqydjlIw",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ -0.1       , -12.00921659, -11.26284221])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gradient(theta, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "M5cP5VjE-YdI"
   },
   "source": [
    "## 拟合参数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "3ye-zhoBjlI1"
   },
   "source": [
    "现在可以用SciPy's truncated newton（TNC）实现寻找最优参数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "0UHRpG7ijlI2",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " message: Optimization terminated successfully.\n",
      " success: True\n",
      "  status: 0\n",
      "     fun: 0.20349770436241052\n",
      "       x: [-2.516e+01  2.062e-01  2.014e-01]\n",
      "     nit: 29\n",
      "     jac: [-1.546e-05 -1.112e-03 -9.700e-04]\n",
      "    nfev: 73\n",
      "    njev: 198\n",
      "    nhev: 0\n"
     ]
    }
   ],
   "source": [
    "import scipy.optimize as opt\n",
    "res = opt.minimize(fun=cost, x0=theta, args=(X, y), method='Newton-CG', jac=gradient)\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "o-z0iOvZjlI5"
   },
   "source": [
    "让我们看看在这个结论下代价函数计算结果是什么个样子~"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "d7Sc0NlzjlI6",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.20349770436241052"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cost(res.x, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "jqbJJue1-lK6"
   },
   "source": [
    "## 用训练集预测和验证"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "F5xbkpoXjlJD"
   },
   "source": [
    "接下来，我们需要编写一个函数，用我们所学的参数theta来为数据集X输出预测。然后，我们可以使用这个函数来给我们的分类器的训练精度打分。\n",
    "逻辑回归模型的假设函数： \n",
    "\t\\\\[{{h}_{\\theta }}\\left( x \\right)=\\frac{1}{1+{{e}^{-{{\\theta }^{T}}X}}}\\\\] \n",
    "当${{h}_{\\theta }}$大于等于0.5时，预测 y=1\n",
    "\n",
    "当${{h}_{\\theta }}$小于0.5时，预测 y=0 。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "L5kMfIWijlJE",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def predict(theta, X):\n",
    "    probability = sigmoid(X @ theta)\n",
    "    return [1 if x >= 0.5 else 0 for x in probability]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "5yDGG6aXjlJI",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy = 89%\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.87      0.85      0.86        40\n",
      "           1       0.90      0.92      0.91        60\n",
      "\n",
      "    accuracy                           0.89       100\n",
      "   macro avg       0.89      0.88      0.88       100\n",
      "weighted avg       0.89      0.89      0.89       100\n",
      "\n"
     ]
    }
   ],
   "source": [
    "theta_min = res.x\n",
    "predictions = predict(theta_min, X)\n",
    "correct = [1 if ((a == 1 and b == 1) or (a == 0 and b == 0)) else 0 for (a, b) in zip(predictions, y)]\n",
    "accuracy = (sum(map(int, correct)) % len(correct))\n",
    "print ('accuracy = {0}%'.format(accuracy))\n",
    "print(classification_report(y, predictions))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "luDLSnm3jlJL"
   },
   "source": [
    "我们的逻辑回归分类器预测正确，如果一个学生被录取或没有录取，达到89%的精确度。不坏！记住，这是训练集的准确性。我们没有保持住了设置或使用交叉验证得到的真实逼近，所以这个数字有可能高于其真实值（这个话题将在以后说明）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "EO1hfP0j-0cc"
   },
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "xIvApW8HjBZg"
   },
   "source": [
    "## 寻找决策边界\n",
    "决策便捷是一系列的$x$可以满足：$$\\frac{1}{1+e^{-\\theta^T x}}=0.5$$\n",
    "也就是说$$e^{-\\theta^T x} = 1$$\n",
    "意味着 $$\\theta^T X = 0$$\n",
    "\n",
    "这是一条直线。\n",
    "\n",
    "参考这里：http://stats.stackexchange.com/questions/93569/why-is-logistic-regression-a-linear-classifier\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "oErM-l5djBZh",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-25.15701564   0.20619717   0.20143666]\n"
     ]
    }
   ],
   "source": [
    "print(res.x) # this is final theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "Bmtqg98tjBZk",
    "tags": []
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "# 假设res.x是一个包含回归系数的列表\n",
    "res_x_example = [1, -2, 3]  # 示例回归结果系数\n",
    "res = type('res', (object,), {'x': np.array(res_x_example)})  # 将列表转换为numpy数组\n",
    "\n",
    "x1 = np.arange(130, step=0.1)\n",
    "coef = -(res.x / res.x[2])  # 现在可以进行元素级除法\n",
    "x2 = coef[0] + coef[1] * x1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "zW-rRiS-jBZu",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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dY675ppraj3HI488gs1mY8qUKWzatIndu3eza9cu1q1bx+jRozGbzdx7771kZ2fX6s/Ro0e5//77qaqqok+fPqxYsYKdO3eya9cuFi5cSFBQEM8888wZX19TNGnk6I477mDjxo08/vjjLFq06Ix2upfWwVO1h1KSE+jZOZZtGTnO1xqc3MnvAiN/n45wR1s++KaWyAcLlAR8d6M7BoOBbt26MXPmTKqrq3n33Xd59913awUhL774IlarlcTERBYuXOgcSTGZTPzXf/0XMTExTJky5bSvX1xczLPPPsu1117rfKxXr168+OKLXHnllfzyyy+88847vPvuu1x88cXOY8477zxmz57NhAkT2LFjB0ePHiUhwfOlTGw2G7Nnz8Zms/Hkk0/WuZ+9evXipZdeYurUqaSmprJo0SJmzpzpbH/ttdcoLS2lTZs2LFq0iLZt2wJgNBq57LLLWLhwocdWyjUpOFq/fj033XQTr7zyCtdeey2jRo1iwIABpy0Cef311zflZcXHebr2UPu4cL9elRYI0xH10b5kvqcl8sFaSwL+7373O959913S09OdjxUXF/PVV18BNbtGnDrFBHDppZdywQUXsHPnzgafv3Pnzvy///f/6jzevXt3evTowaFDh7j44otrBUYOKSkphISEUFVVxYEDB7wSHKWlpZGVlUVcXBw33XRTvcddf/31pKamOu8b1Lz/1q1bB8Att9ziDIxcJSUlcdVVV7F69erm7/wpmhQczZgxw/nmt9vtrFq1ilWrVjV4jsFgUHAUwFR7qHFUD0g8rSXywQIpAf/nn3/mvffeY9u2bRw+fBiz2ezMI3LIzc11/jsjI8PZ3tDipMGDB582ODrvvPPqzeFt27Ythw4don///m7bg4KCiIuLIzc315lD5Gk7duwAoLS0lEsvvbTe4ywWC0CtabUjR45w4sQJoOH7OGTIEN8PjhrKNpfWSbWHGidQpiPEfzjywQpSl2ArLXA+bgyLPOt8sEBJwP/ss8944IEHnMnAUJOUHBpa8/fMYrFQVFREWVmZs72g4OQ97NixY73PfSYjOQ3NugQHB5/xMVar9bSv1RKOHTsG1AQ/x4+fPs+souJkuZX8/Hznvxu6jw21NacmBUee3h9GfJ9qDzVOa5mOEN/S3PlgLRFweVphYSEzZsygqqqKIUOGMG3aNAYMGFBrmmzLli1MmDDBe530cdXV1QCcf/75vP/++17uTdM0eW81EVeqPdQ4gTQdIf6lufPB/D0B/8svv6S0tJTY2Fhee+01wsPrTv87tspyFR8f7/x3bm5uvQuTXKfiAlX79jWLSE5dhXYmXHOMcnNz6dXL/QyDp+5jk5byi5wqJTmBqHAThSVVzg941R6qX2TSIIxhkdjMJ2rdL3+bjhCBkwFX/BW3EzvoGr8JjKBmGTlAz5493QZGgNuyNcnJyRiNNR+lW7durff5G2rzJkffoeG9T13zi+tz4YUXAjVB5HfffdeofnTt2pU2bdoANZvc1sdT91HBkTQr1R5qHNUDEvEN0dHRAGRlZVFZWVmnfd++fXz66ad1Ho+JiWHYsGEAvPnmm27P/frrr0+bjO0tjkKXULPy7nTHNXTM4MGD6dGjB1BTNds1d8sdRwI21ARfo0ePBmDZsmW1crkcfvjhBzZs2NDgczaXZptW27FjB+np6eTm5lJWVlZvdGkwGHj66aeb62XFBwVK7SFP8ffpCJFAMGzYMIxGIydOnGD69Ok89thjdOzYkaqqKj7//HPmzJlDZGRkrQ90h3vvvZevv/6an376iTvvvJMnnniCXr16YbVa2bhxI08++SQxMTENBhbekpiYiMlkwmKxsGLFCiZPnux2xVxSUhJQE6Ds2LHDOUrkKjg4mKeeeoopU6aQnp7OuHHjuP/++7n44osxmUxAzWrAr776ig8++IARI0Zw9913O8//7//+bz799FMKCwuZNGkSc+bMoX///tjtdjZv3szjjz9OeHi4c7VbS2pycJSVlcWDDz5Yp2LoqTkUro8pOAp8/l576Gw0pfCl6gGJeFdiYiKTJ09m4cKFbNy4kY0bNxIdHU1FRQUWi4WuXbty3333MX369Drn9u/fnyeeeIInnniCrVu3cvXVVxMdHU1lZSVVVVX06tWLsWPHMm/ePC9cWcPCw8O57rrr+OCDD3j22Wd55ZVXiIuLw2AwcNVVV/HII48ANXWUevbsSWZmJrfeeiuxsbHO0aSHH37YOeozdOhQXnrpJR5++GG+/fZbJkyYgMlkIjIykrKyslqjSSNHjqzVl86dO/P888/zl7/8hX379nHjjTcSGRlJdXU1FRUVtG/fnhkzZvDXv/61xe9Lk4KjwsJC/vSnP5Gbm0u7du0YNGgQ69atIywsjFGjRnH8+HG+/fZbzGYzcXFxXH755c3UbRHf4unClyLS/KZPn07v3r159913OXjwIFarle7du3PllVcyZcqUOoMArsaOHUtSUhILFixg586dlJeX07lzZ6666iruvPNONm7c6MEraZwnnniCTp06sWHDBn7++WdnQnVh4cnVssHBwbz11lv84x//YMuWLbXqKbmWNoCaoOezzz7jvffe49///jeHDh2ipKSE8PBwevXqRf/+/bn88su57LLL6vTl8ssv56OPPnJuPFtSUkL79u254oormDp1Kj/++GML3omTDPaGsqtO48UXX+S1117j/PPPZ/HixYSHh9O3b1/atWvnrHxZVlbGP//5T/7v//6PW265hSeffLK5+u73XHdJFv91rLCMJ17fQlmFhbjo2oUvI8KCmX3nbzWlKCLiR5qUkP3ll19iMBi4//77683uj4iI4KGHHuKPf/wjy5cvd5YHFwkUjsKXjsAITha+LC23sC0jx8s9FBGRxmhScHT48GEMBkOdfV7cJUvdeeedAH5fGErkVCp8KSISWJoUHFmtVmJiYpwly6EmuctsNtc5tl27dkRHR3PgwIGmvKSIz3EtfOlKhS9FRPxTk4KjDh061NobBWqqXFZXV/Pzzz/XetxisVBaWkpJSUlTXlLE56jwpYhIYGlScNS5c2cqKyudlUUB547Bn3zySa1jP/roI2w2m8c2jRPxFBW+FBEJLE1ayn/xxRezfft2tm3bxnXXXQfAddddx7p163jttdfIz8/n3HPPZf/+/bz//vsYDIY6dQ1EAoEKX4qIBI4mLeX//vvv+e///m8GDx5cq7jVgw8+yJo1a+pspPmb3/yGZcuWOcu0t3Zayi8iIuJ7mhQc1cdut7NixQrWrl1LTk4O0dHRXHrppUyaNEmBkQsFRyIiIr6nRYIjOTMKjiRQWYvyMB9MO7lXXNIggmPbe7tb4qf0fhJPa7aNZ/3Fl19+yYoVK9i1axcnTpwgNjaWbt26MXjwYP7yl7/UKksANavs3nrrLVatWsXhw4cxmUz07duX8ePHM2rUKC9dhfiqpuyvFijMB9MoSF2CrcLs2EmF4vT1xA8fT2TSIG93T/yM3k/iDU0aOfrmm2/qFIBsiN1uZ/78+UybNu1sX/KsWa1WHn30UVatWgVAp06daNeuHSdOnODo0aNYLBZ27NhBZGSk85zKykomTpxIeno6QUFB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ihUr7BMmTLD//e9/t2/cuNH+4osv2pOSkuzjxo1r8Lyzfe8ePXrUfv7559uTkpLsL774ot1isdjtdru9uLjYPnnyZHtSUpL997//vd1mszXvhYrfU3AkzWrnzp32vn372qdOnWpfuXJlvcFRRkaGPSkpyd63b197VlZWnfaHHnrInpSUZP/zn//siW77lS1btjjva0lJyRmdk5eXZ09OTrYnJSXZt2zZUqfd8SF1ww03NHd3/VZJSYm9T58+9qSkJPtnn31Wp91ms9mvvPJKe1JSkn3JkiXOx/XePnNLliw5bXDUlPfu//zP/9iTkpLst99+e522EydO2C+66CJ9KRC3lJAtzcZisfD4448TFhbGrFmzGjx2w4YNAAwZMoQePXrUaR87dixQk1NTVlbW/J31Y4sWLQJg0qRJREVFndE5qampWCwWEhMTGTJkSJ32W265BYCMjAznVEVrV1VVhf3XrIPu3bvXaTcYDM7pGKvV6nxc7+3m1ZT3ruN3cfPNN9c5LzY2ltGjRwOwbt265u62+DkFR9JsFixYwMGDB7n33ntJSEho8Nhdu3YB1JvMOmDAAEJCQqisrGTfvn3N3VW/VVlZyebNmwEYOnQoP/zwA3PnzmXSpEncddddvPTSS/zyyy91znPc74suusjt83bs2JGuXbvWOra1i4+Pd76Pd+7cWae9rKyM/fv3A9C/f3/n43pvN6+zfe/m5OSQm5sLwKBBg9ye6/gdffvtt83UWwkUCo6kWfz4448sWLCA5ORkxo8ff9rjs7KyAPffyAFMJhOdOnUCIDMzs9n66e/279+PxWIBID09neuvv563336bzZs388UXXzB//nxGjx7N6tWra513uvvt2qb7fdKDDz6IwWDgb3/7GytWrCAvL4/y8nJ2797N1KlTOX78ONdee22tD269t5vX2b53HeeZTKZ6v6w5Rv5+/vln539XIqCl/NIM7HY7jz32GFarlaeeeoqgoKDTnlNUVATUDG3Xx9FWXFzcPB0NAHl5ec5/z549m379+vHYY4/Rt29fcnJyeOGFF1i3bh0zZsygV69e9OvXD9D9PlvXXnst0dHRvPrqqzz22GO12tq3b8+TTz7pnNZx0L1uXmd7P0+cOOFsMxgMbs9r06YNADabjdLSUuLi4pqhxxIINHIkTfbee++xY8cObr/99lrTCw2prKwEar7V1SckJASAioqKpncyQJjNZue/w8LCWLhwoXOapkePHjz//POce+65WCwWXnvtNeexut9n79ChQ+Tn5zuX8vfp04fw8HDy8vL46KOP+P7772sdr3vdvM72fjbmPNfjRUDBkTRRbm4uzz//PB07duS+++474/NCQ0MBGhzKrqqqAmqCAKnhuG8AN9xwQ51v00aj0Vlz56uvvsJms9U6T/e7cZ566inmzZtHXFwca9euJTU1lVWrVrF161YmT57Mt99+y6233lorz0v3unmd7f1szHmux4uAgiNpojlz5lBaWspjjz12xiunAGJiYoCTQ+buONocx0rtqYXf/OY3bo/p1asXUDPK5Jha0P1uvP3797N06VJMJhMvvfQSPXv2dLaFhYXx8MMPM3ToUEpLS1mwYIGzTfe6eZ3t/XT8t1JUVORcdXgqx38fRqOxUX+/JPApOJIm2bt3L1DzDXvYsGG1/jd37lygZtWI47EdO3YAkJiYCNRMWbhjsVicFbYdx8rJwAfqny5w/QbsGDk63f0GnMugdb9rpKenY7fb6dGjB126dHF7zLBhwwDYs2eP8zG9t5vX2b53Hf+2WCzk5OS4Pe/nn38GoGvXrg1Ov0nro+BImsXx48fr/K+0tBSo+YB2POYY4h44cCBQ8wHkzu7du7FYLISGhnLuued65Br8QceOHZ0f1I4/7KdyPB4aGupMOHXcb0dweqrc3FyOHDlS69jWzjW/63Rcp2f03m5eZ/ve7dy5Mx06dADgm2++cXuu43G95+VUCo6kSVJTUzlw4IDb/zn2UOrSpYvzMceGm1dddRUA27Ztc/uNcPny5QBcdtlltfYHE7j66qsB+PTTT2sVH3T44IMPgJraLo6NZ0eMGIHJZCIrK4utW7fWOWfZsmUA9OvXz23hwtbIMY126NAht7WjAGfNKdcpN723m1dT3ruO38X7779f57yioiLWr18P4CwGKeKg4Ei8Ijk5mSuuuILq6mruv/9+jh07BtSUBVi+fDmffPIJRqORqVOnermnvmfy5MlER0dz5MgRZs+e7VxlY7fbefvtt/niiy8wGAzceeedznPatWvnrMw8c+ZMfvrpJ2dbamoqb7zxBgDTpk3z4JX4tmHDhtG2bVssFgv33ntvrRo6FRUV/O1vf2PLli0AXHfddc42vbebV1Peu5MnTyYsLIy0tDReeuklqqur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Ofv+0EMPsWrVKrTIVUQCmXKORHxQ+/btAffTZWfqnXfeITU1laCgIHr37k1VVRUPPPBAvaM+a9asAeDGG2/knnvuoUePHrUCI+CMRrFERPydgiMRH3ThhRcCkJeXx3fffdfo8w8cOMDf/vY3AO6++25ef/11YmJi+PHHH5k3b57bcxx5RP369XPbbjab+fbbbxvdFxERf6PgSMQHDR482Lnia968ec4ikPU5ceKE89+u9Ywuuugipk6dSpcuXZg9ezYAy5cvZ8OGDXWew1F0cf/+/W5fY/78+ZjN5rO5HBERv6LgSMQHBQcH89RTTxEcHEx6ejrjxo1jy5YttZKUf/75Z5YuXcof/vAH3nvvPefjTz/9ND/88AMxMTE899xzziTnq6++mhtvvBGAxx9/nJycnFqv6VgVt2LFCpYvX+4MyPLy8nj66ad54403aNOmTUte9mmZzWYKCgqc/3P00WKx1Hq8qKjIq/0UEf+mhGwRHzV06FBeeuklHn74Yb799lsmTJiAyWQiMjKSsrKyWqNJI0eOBGDjxo0N1jN67LHH2LFjBz/99BPTp0/n7bffdgZPkyZNYsOGDfz000/MmjWLJ598kqioKEpKSrDb7YwdO5aqqio++ugjD92BuubMmeP29Xfu3MnQoUOdP3fp0oXU1FRPdk1EAohGjkR82MiRI/nss8/485//zIABA4iIiKCkpISQkBD69u3LTTfdxD//+U8mT55MTk4Ojz32GFCTVO2unlF4eDjPP/88ISEhfPPNN7z66qvOtpiYGJYtW8af/vQnunTpQlBQEEFBQaSkpPD88887p+VERAKdNp4VERERcaGRIxEREREXCo5EREREXCg4EhEREXGh4EhERETEhYIjERERERcKjkRERERcKDgSERERcaHgSERERMSFgiMRERERFwqORERERFwoOBIRERFxoeBIRERExIWCIxEREREXCo5EREREXPx/6gATc0DIBaQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 631.583x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 假设data是一个包含'exam1', 'exam2', 'admitted'列的pandas DataFrame\n",
    "# data = ...\n",
    "\n",
    "sns.set(context=\"notebook\", style=\"ticks\", font_scale=1.5)\n",
    "\n",
    "# 正确调用lmplot函数\n",
    "sns.lmplot(x='exam1', y='exam2', hue='admitted', data=data, \n",
    "           fit_reg=False, \n",
    "           scatter_kws={\"s\": 25})\n",
    "\n",
    "# 如果你想要绘制x1和x2的线，确保x1和x2已经定义\n",
    "# plt.plot(x1, x2, 'grey')\n",
    "# plt.xlim(0, 130)\n",
    "\n",
    "plt.show()  # 显示图形"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "qgr6k1ybjlJM"
   },
   "source": [
    "## 正则化逻辑回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "raPYPfoXjlJN"
   },
   "source": [
    "在训练的第二部分，我们将要通过加入正则项提升逻辑回归算法。如果你对正则化有点眼生，或者喜欢这一节的方程的背景，请参考在\"exercises\"文件夹中的\"ex2.pdf\"。简而言之，正则化是成本函数中的一个术语，它使算法更倾向于“更简单”的模型（在这种情况下，模型将更小的系数）。这个理论助于减少过拟合，提高模型的泛化能力。这样，我们开始吧。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "8HRDKZsYjlJO"
   },
   "source": [
    "设想你是工厂的生产主管，你有一些芯片在两次测试中的测试结果。对于这两次测试，你想决定是否芯片要被接受或抛弃。为了帮助你做出艰难的决定，你拥有过去芯片的测试数据集，从其中你可以构建一个逻辑回归模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "JuiBlOvjjlJR"
   },
   "source": [
    "和第一部分很像，从数据可视化开始吧！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "PPewmmIgjlJS",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>test1</th>\n",
       "      <th>test2</th>\n",
       "      <th>accepted</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.051267</td>\n",
       "      <td>0.69956</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.092742</td>\n",
       "      <td>0.68494</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.213710</td>\n",
       "      <td>0.69225</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.375000</td>\n",
       "      <td>0.50219</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.513250</td>\n",
       "      <td>0.46564</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      test1    test2  accepted\n",
       "0  0.051267  0.69956         1\n",
       "1 -0.092742  0.68494         1\n",
       "2 -0.213710  0.69225         1\n",
       "3 -0.375000  0.50219         1\n",
       "4 -0.513250  0.46564         1"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data2 = pd.read_csv('ex2data2.txt', names=['test1', 'test2', 'accepted'])\n",
    "data2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "PH37JgMmjlJV",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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ZNIf/vAHFRYWOq87ePCgHn74YVmtVg0cOFCDBg1yuY1j8tunn37q8T5HjhypjIwMHTx4UHfddZe2b9/uctxut6uoqEhz5sxRQUGB8/qMjAxddNFFslqteuSRR3Tw4EHnsW3btmnOnDkyBdnfUAa73duWYwhlo0aNkiStXr06wCsBAAAIP3V7MDlQyQSEjurqahUXFys1NdXjiPm28nVxpfLX7NbGH6fNGQzSFWnJyhrRK+gCJknatGmT7rjjDhkMBq1evVpdu3Zt9PyXX35ZTz31lFJSUrR69WoZjUb96U9/0l//+ldJtT2XevbsqRMnTmj//v2yWCx68sknddNNNznvY/fu3brvvvu0f/9+SVLPnj3Vvn17lZaW6ocfflDXrl314Ycfujzu888/rz//+c+y2WyKi4tTamqqjEajKioqVFZWJkm68cYb9dRTTzlvM3/+fC1YsEDXX3+99u3bp8LCQvXq1UsxMTH69ttvdfr0aSUmJurvf/+7evTo4fJ4//rXv/TII48415eYmCiDwaD77rvP2Rj98OHDmjJlijNES05O1jnnnCOz2azvvvvOWan16quvKiMjw3nf+/bt06233qry8nK1a9dOF1xwgaqrq7Vnzx6lp6ere/fuWrFihdvr1pTmfM83J0+g8TcAAADQCvWbfPeemq2d8/KYnAigSf1T49U/NV5mi1VV1RbFxZqCrgdTXY4qpssvv7zJgEmSfv7zn+uZZ55RaWmpNm3apMGDB+t3v/udrrzySr322mv64osv9M0336hjx47q16+frrzySretaL169dI777yjV199VR988IGKi4t14MABnXPOOcrMzPRYUXX//fdr+PDh+tvf/qbNmzdr165dstlsSkhI0FVXXaVRo0Y5g5P6oqOj9dprr2nhwoVatWqVSkpK1KlTJ1155ZXKzs7WOeec4/F5Hjt2TG+++aaKi4udfZJuvPFG5zmdOnXSq6++qhUrVuhf//qXioqKVFRUpOjoaHXt2lWXXXaZrrnmGl166aUu992jRw8tX75ceXl5WrNmjXbt2qUuXbro/vvv1+TJkzV79uwmvw7+RCVThKCSCQAAwPfcpsg1NF2OoAkIaoGqZELwcFQy1a9wCldtVclETyYAAACgBWwWiwpzZnsMktymzuXMlq1eXxAAAMINIRMAAADQAkaTSd0nTVRsSorHSiVn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6S9/+YvOPfdct7WYzWY9+OCDKikpUVZWln7/+987W/P88MMPmjFjhj788EP97ne/0+uvv+5yu2nTpunkyZO68sor9cc//lFnnXWWc52/+c1vdPr06SZfi2BBJZMPHD16VJKc3wieOI45zm3JbY8dO9aqdQJoWzGJCeo91fWTht5Ts3mTirAUTlVA/OwCAPwpXLds19TU6Ntvv9V//dd/6YsvvlBUVJQeeOAB5/E1a9Zo8+bNOu+887RgwQJnwCRJcXFxmj17ttLS0vT9998728o0xmKxaN68eZKkZ5991iVgkqRrr71WU6dOlSS9+OKLLseeffZZ2e123X777Zo6dapLxVVUVJRGjhypkSNHNuv5L1++XLt379agQYP01FNPufR+7ty5s5599lklJSXpiy++0BdffOE89u677+q7775T+/bt9cwzz7hkAyNGjNDkyZNlCdKqcE8ImXzAbDZLUqPjFB0prOPcltzWUXLYkNWrVzf4H1VMQNszl1do57w8l+t2zstrsAwaCHX1g6Zt02eEXMAk8bMLAPC/cPmwZsGCBc7eRBdeeKF+/vOf65133lGPHj2Ul5enK664wnmuIzj6xS9+odjYWLf7MhqNuuqqqyRJW7ZsafKxv/rqKx04cEA9evRw9kCuzxE8ff75587eRiUlJfrmm29kMBh03333Ne8JN8Lx/G6++WYZje5RS1xcnAYPHizJ9fk5+kaNHTvWZeudwy233NJoXhBs2C7nAzExMZLUaLpYU1Pjcm7d2546dcqr23r6QQQQHOp/6tR7arZ2zstz20oEhBtHFZBjm5kUWlVA/OwCAAIlHLZsJycnOwsajh07pn379slisSg+Pl4XXXSRy7nffPONJOmdd95psCF3ZWWlJDXYANzT/R05ckS33HKLx3Psdruk2oKNI0eOKD4+Xrt27ZJU2+7mnHPOafJxvOVYz4svvuiyHa6u0tJSSa7Pb8+ePZKkXr16ebxNhw4ddM4552j//v0+W2tbImTygYa2wtXV0La4jh076tSpU17dtmPHjq1dKoA24FbW/OMfBXX/aODNKsJVQ1VAofD9zs8uACDQQv3DmnHjxumhhx5yXi4vL9f06dP1ySef6IEHHtCyZcucVTjHjx+X9FOo0pimdvFIP7WTOXr0qMv2s4acOnVKknTixAlJ8lg11BqO57djx44mz637/BxT5Otur6svISGBkCmS9OzZU1JtKmmxWDyWspWUlLicW/e2Bw8edI5HrM9isTjTzvq3BRB4NotFhTmzPZY1u71ZzZmtgXlzQ2ZfPdCUUK4C4mcXABAMQvnDGk8SExP1l7/8Rdddd52Kior08ssv6/7775dUu11MkubNm6cxY8a0+rEc9zdixAg9//zzXt+uffv2kn4KhXwlLi5Ox44d0z/+8Y8Gp843dDvppyouTyoqQmcLPz2ZfKBfv34ymUyqqalRQUGBx3M+//xzSdLFF1/scr3jsuN4fQUFBbJYLIqJiXHrzA8g8Iwmk7pPmqjYlBSPfww499unpKj7pIm8SUXY8FQF1LFfX7f+EsHa14ifXQBAoNX/XXrhU0+ExO/QprRv395Z3fT88887K4569+4tSdq5c6dPHueCCy6QJOf2N2851lFaWqpDhw75ZC1177e5z++8886TJO3evdvj8RMnTvh0nW2NkMkH2rdvr6FDh0qS3njjDbfje/fu1aZNmyRJo0ePdjl27bXXSpI2b97ssZpp2bJlkqThw4frzDPP9Om6AfhG4rAhGpg3t8FPm2ISEzQwb64Shw3xeByBZ7ZYdfh4tcwWa6CXEhK8qQJy/pGcM1u2IJ2Iws8uACBQQv3DmqaMHTtWXbt21fHjx/Xqq69K+um98JtvvumTKqJLL71UiYmJ2r9/v1atWuX17bp166Z+/frJbrfrpZde8vp2jh7J9Yd5OTie39/+9rdmTYMbNmyYJCk/P9+5la+u119/nely4eqWW27RyJEjtXjxYrdjkydPlsFgUH5+vpYtW+ZsMHbo0CFNmzZNNptNV199tfr27etyuwEDBuiqq66S1WrVb3/7W2dCabfbtWzZMuXn58toNOrBBx9s8+cHoOWaqnKgCiI4Fe2p1JzFW3Tzoyt0+/+8p5sfXaE5i7fo6+KGy5URXlVA/OwCAPwtXD6saYzJZNI999wjSXr11Vd14sQJjRw5UhkZGTp48KDuuusubd++3eU2drtdRUVFmjNnToM7hOqKjo7Www8/LEl69NFH9eabb7qFMRUVFXr99dfdttNNmzZNBoNBixcv1vz58539miTJarXqo48+0ocffuhym+7du0tqePLd+PHj1atXL3399dd68MEH3YpIrFarPvvsM82YMUMHDx50Xn/dddc5A7lHHnnEWfkl1U6eW7hwYUhNlzPYHWlIBCkrK9PYsWOdl2tqalRVVaV27do592dK0r333usy0nDkyJHav3+/pkyZ4tLczGHx4sV66qmnZLfblZycrE6dOmnXrl2qqalRamqqlixZos6dO7vd7ocfftAtt9yivXv3Kjo6Wueff74OHz6ssrIyGQwGzZgxQ7fddlurnvOoUaMkSatXr27V/QBAuHh3Q7EWLS9QlNEgq+2nX4WOy5PHpWvM4NQArjD42SyWRkOYpo4DABAsqqurVVxcrNTUVL9M9S5ft14lS5YqLXeWx4pac3mFCnNmq/ukiUFZUXvbbbdpy5YtDb43lmrfZ48cOVLl5eWaOnWqHnzwQR0+fFhTpkzRZ599Jql2Ot0555wjs9ms7777TidPnpRUG0xlZGQ478vxXnz16tU699xzXR7n+eef15///GfZbDbFxcUpNTVVRqNRFRUVKisrkyTdeOONeuqpp1xu97e//U1z5syR1WpVbGyszjvvPNXU1Oj7779XdXW123P73//9X/35z3+WVLtV7+yzz5Yk/fd//7eztc3333+vX//6184tc926dVN8fLyqqqpUUlLibPhd/3l8+eWXuuuuu1RVVaXY2Fidf/75Onr0qL777jtdffXVOnbsmLZs2eL2urRGc77nm5MnRGTjb6vVqiNHjrhdf/r0aZfrveloX9edd96pPn366KWXXlJBQYEqKyuVkpKi0aNH6/77729wu1vnzp21fPlyvfDCC1q1apV27dqluLg4DR8+XPfcc48yMzObtQ4AQOOK9lRq0fLaT8jqBkx1Ly9cXqAeyR3VP7XhSR+RjiogAABaJnHYEMVnDmrwd6Vjy3Yo/y6Njo7WPffco6eeekqLFy/W7bffrk6dOunVV1/VihUr9K9//UtFRUUqKipSdHS0unbtqssuu0zXXHONLr30Uq8f5/7779fw4cP1t7/9TZs3b9auXbtks9mUkJCgq666SqNGjXKGJHX96le/0mWXXabFixdry5Yt2rlzp84880ylpqZq6NChysrKcjn/3nvvlc1m04oVK7Rv3z59++23kuRSeXTuuedq+fLlevPNN7Vq1Sp9++23Ki0t1RlnnKHzzjtPmZmZuvrqq9W1a1eX+7744ou1fPly5eXlaePGjdq5c6e6deumhx9+WPfcc4/uvPPOZrzygRWRlUyRiEomAPjJnMVbtKXogFvAVFeU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DFDYlGirZWFTogkwAQAAwC4EmQAAcHG5Ged0bEGs1bJjC2JLnXUOAAAAsIUgEwAALqx4ke8u8+dZ1Wgi0AQAAICKIsgEAICLsjWLnF+njiWKgRNoAgAAQEUQZAIAwAUVGI2Kj5lts8h3iVnnYmarwGis4RYDAACgtiPIBACAC3I3GNR6zCh5h4banEXOEmgKDVXrMaOYGhwAAADl8qzpBgAAgJoReMft8u/Tq9QAkldggLrHvk2ACQAAABVCJhMAAC6svAASASYAAABUFEEmAAAAAAAAOMxlh8sdPnxYH374ofbt26fMzEwFBQWpf//+mjRpkpo1a2b38RYtWqR33323zG1effVVjR492uY6o9Go5cuX67PPPtPp06dlMBjUsWNHPfroo7rnnnvsbg8AAAAAAEB1cskg07Zt2zRt2jQZjUb5+/srLCxMiYmJWrlypbZs2aLVq1erVatWlTq2v7+/2rRpY3NdYGCgzeW5ubl64okntH//fnl4eOimm27StWvXtHfvXu3du1cTJkzQ888/X6n2AAAAAAAAVAeXCzKlp6frxRdflNFo1KRJk/TMM8/I09NTWVlZmjp1qnbt2qUpU6bo008/lZubm93H79evn+bPn2/XPm+88Yb279+vli1basmSJbrxxhslSdu3b9eUKVO0ZMkS/e53v9OAAQPsbg8AAAAAAEB1cLmaTB999JGuXbumnj17avLkyfL0LIyz+fr66q233pKvr6/i4+P1zTffVEt7zp07pzVr1kiS5s2bZwkwSVJUVJSefPJJSSp3KB4AAAAAAEBNcrkg09atWyVJI0aMKLGucePGGjx4sCTpq6++qpb27NixQ0ajUW3btlWfPn1KrB81apQkKSEhQadPn66WNgEAAAAAANjLpYbLpaamKj09XZLUs2dPm9v06NFD//jHP/TLL79U6hxHjx7V9OnTlZGRoRtuuEEdOnTQkCFDFBYWZnP7gwcPSpJuueUWm+ubN2+uli1bKikpSQcPHlTr1q0r1S4AAAAAAICq5FJBppMnT0qSDAaDgoODbW5jLvh95swZGY1GGQwGu85x5MgRHTlyxPLzjh079MEHH2js2LGaMWOGPDw8bLaprOBR69atlZSUpMTExDLPHRUVVeq61NRUhYSEVOAVAAAAFMo15is7xygfb4O8DB7l7wAAAFyaSwWZLl26JKlwWFxp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",
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "positive = data2[data2['accepted'].isin([1])]\n",
    "negative = data2[data2['accepted'].isin([0])]\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.scatter(positive['test1'], positive['test2'], s=50, c='b', marker='o', label='Accepted')\n",
    "ax.scatter(negative['test1'], negative['test2'], s=50, c='r', marker='x', label='Rejected')\n",
    "ax.legend()\n",
    "ax.set_xlabel('Test 1 Score')\n",
    "ax.set_ylabel('Test 2 Score')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "nKZFQDlUjlJY"
   },
   "source": [
    "哇，这个数据看起来可比前一次的复杂得多。特别地，你会注意到其中没有线性决策界限，来良好的分开两类数据。一个方法是用像逻辑回归这样的线性技术来构造从原始特征的多项式中得到的特征。让我们通过创建一组多项式特征入手吧。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "0WuhZaH9PyJv",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def feature_mapping(x, y, power, as_ndarray=False):\n",
    "#     \"\"\"return mapped features as ndarray or dataframe\"\"\"\n",
    "    # data = {}\n",
    "    # # inclusive\n",
    "    # for i in np.arange(power + 1):\n",
    "    #     for p in np.arange(i + 1):\n",
    "    #         data[\"f{}{}\".format(i - p, p)] = np.power(x, i - p) * np.power(y, p)\n",
    "\n",
    "    data = {\"f{}{}\".format(i - p, p): np.power(x, i - p) * np.power(y, p)\n",
    "                for i in np.arange(power + 1)\n",
    "                for p in np.arange(i + 1)\n",
    "            }\n",
    "\n",
    "    if as_ndarray:\n",
    "        return pd.DataFrame(data).to_numpy()\n",
    "    else:\n",
    "        return pd.DataFrame(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "sISiRom-jlJZ",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(118, 28)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f00</th>\n",
       "      <th>f10</th>\n",
       "      <th>f01</th>\n",
       "      <th>f20</th>\n",
       "      <th>f11</th>\n",
       "      <th>f02</th>\n",
       "      <th>f30</th>\n",
       "      <th>f21</th>\n",
       "      <th>f12</th>\n",
       "      <th>f03</th>\n",
       "      <th>...</th>\n",
       "      <th>f23</th>\n",
       "      <th>f14</th>\n",
       "      <th>f05</th>\n",
       "      <th>f60</th>\n",
       "      <th>f51</th>\n",
       "      <th>f42</th>\n",
       "      <th>f33</th>\n",
       "      <th>f24</th>\n",
       "      <th>f15</th>\n",
       "      <th>f06</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.051267</td>\n",
       "      <td>0.69956</td>\n",
       "      <td>0.002628</td>\n",
       "      <td>0.035864</td>\n",
       "      <td>0.489384</td>\n",
       "      <td>0.000135</td>\n",
       "      <td>0.001839</td>\n",
       "      <td>0.025089</td>\n",
       "      <td>0.342354</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000900</td>\n",
       "      <td>0.012278</td>\n",
       "      <td>0.167542</td>\n",
       "      <td>1.815630e-08</td>\n",
       "      <td>2.477505e-07</td>\n",
       "      <td>0.000003</td>\n",
       "      <td>0.000046</td>\n",
       "      <td>0.000629</td>\n",
       "      <td>0.008589</td>\n",
       "      <td>0.117206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.092742</td>\n",
       "      <td>0.68494</td>\n",
       "      <td>0.008601</td>\n",
       "      <td>-0.063523</td>\n",
       "      <td>0.469143</td>\n",
       "      <td>-0.000798</td>\n",
       "      <td>0.005891</td>\n",
       "      <td>-0.043509</td>\n",
       "      <td>0.321335</td>\n",
       "      <td>...</td>\n",
       "      <td>0.002764</td>\n",
       "      <td>-0.020412</td>\n",
       "      <td>0.150752</td>\n",
       "      <td>6.362953e-07</td>\n",
       "      <td>-4.699318e-06</td>\n",
       "      <td>0.000035</td>\n",
       "      <td>-0.000256</td>\n",
       "      <td>0.001893</td>\n",
       "      <td>-0.013981</td>\n",
       "      <td>0.103256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.213710</td>\n",
       "      <td>0.69225</td>\n",
       "      <td>0.045672</td>\n",
       "      <td>-0.147941</td>\n",
       "      <td>0.479210</td>\n",
       "      <td>-0.009761</td>\n",
       "      <td>0.031616</td>\n",
       "      <td>-0.102412</td>\n",
       "      <td>0.331733</td>\n",
       "      <td>...</td>\n",
       "      <td>0.015151</td>\n",
       "      <td>-0.049077</td>\n",
       "      <td>0.158970</td>\n",
       "      <td>9.526844e-05</td>\n",
       "      <td>-3.085938e-04</td>\n",
       "      <td>0.001000</td>\n",
       "      <td>-0.003238</td>\n",
       "      <td>0.010488</td>\n",
       "      <td>-0.033973</td>\n",
       "      <td>0.110047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.375000</td>\n",
       "      <td>0.50219</td>\n",
       "      <td>0.140625</td>\n",
       "      <td>-0.188321</td>\n",
       "      <td>0.252195</td>\n",
       "      <td>-0.052734</td>\n",
       "      <td>0.070620</td>\n",
       "      <td>-0.094573</td>\n",
       "      <td>0.126650</td>\n",
       "      <td>...</td>\n",
       "      <td>0.017810</td>\n",
       "      <td>-0.023851</td>\n",
       "      <td>0.031940</td>\n",
       "      <td>2.780914e-03</td>\n",
       "      <td>-3.724126e-03</td>\n",
       "      <td>0.004987</td>\n",
       "      <td>-0.006679</td>\n",
       "      <td>0.008944</td>\n",
       "      <td>-0.011978</td>\n",
       "      <td>0.016040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.513250</td>\n",
       "      <td>0.46564</td>\n",
       "      <td>0.263426</td>\n",
       "      <td>-0.238990</td>\n",
       "      <td>0.216821</td>\n",
       "      <td>-0.135203</td>\n",
       "      <td>0.122661</td>\n",
       "      <td>-0.111283</td>\n",
       "      <td>0.100960</td>\n",
       "      <td>...</td>\n",
       "      <td>0.026596</td>\n",
       "      <td>-0.024128</td>\n",
       "      <td>0.021890</td>\n",
       "      <td>1.827990e-02</td>\n",
       "      <td>-1.658422e-02</td>\n",
       "      <td>0.015046</td>\n",
       "      <td>-0.013650</td>\n",
       "      <td>0.012384</td>\n",
       "      <td>-0.011235</td>\n",
       "      <td>0.010193</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 28 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   f00       f10      f01       f20       f11       f02       f30       f21  \\\n",
       "0  1.0  0.051267  0.69956  0.002628  0.035864  0.489384  0.000135  0.001839   \n",
       "1  1.0 -0.092742  0.68494  0.008601 -0.063523  0.469143 -0.000798  0.005891   \n",
       "2  1.0 -0.213710  0.69225  0.045672 -0.147941  0.479210 -0.009761  0.031616   \n",
       "3  1.0 -0.375000  0.50219  0.140625 -0.188321  0.252195 -0.052734  0.070620   \n",
       "4  1.0 -0.513250  0.46564  0.263426 -0.238990  0.216821 -0.135203  0.122661   \n",
       "\n",
       "        f12       f03  ...       f23       f14       f05           f60  \\\n",
       "0  0.025089  0.342354  ...  0.000900  0.012278  0.167542  1.815630e-08   \n",
       "1 -0.043509  0.321335  ...  0.002764 -0.020412  0.150752  6.362953e-07   \n",
       "2 -0.102412  0.331733  ...  0.015151 -0.049077  0.158970  9.526844e-05   \n",
       "3 -0.094573  0.126650  ...  0.017810 -0.023851  0.031940  2.780914e-03   \n",
       "4 -0.111283  0.100960  ...  0.026596 -0.024128  0.021890  1.827990e-02   \n",
       "\n",
       "            f51       f42       f33       f24       f15       f06  \n",
       "0  2.477505e-07  0.000003  0.000046  0.000629  0.008589  0.117206  \n",
       "1 -4.699318e-06  0.000035 -0.000256  0.001893 -0.013981  0.103256  \n",
       "2 -3.085938e-04  0.001000 -0.003238  0.010488 -0.033973  0.110047  \n",
       "3 -3.724126e-03  0.004987 -0.006679  0.008944 -0.011978  0.016040  \n",
       "4 -1.658422e-02  0.015046 -0.013650  0.012384 -0.011235  0.010193  \n",
       "\n",
       "[5 rows x 28 columns]"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "degree = 5\n",
    "df=data2\n",
    "x1 = np.array(df.test1)\n",
    "x2 = np.array(df.test2)\n",
    "\n",
    "data = feature_mapping(x1, x2, power=6)\n",
    "print(data.shape)\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "UaNs-uSEjlJe"
   },
   "source": [
    "现在，我们需要修改第1部分的成本和梯度函数，包括正则化项。首先是成本函数："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "YgE_bAV2jlJe"
   },
   "source": [
    "## Regularized cost（正则化代价函数）\n",
    "$$J\\left( \\theta  \\right)=\\frac{1}{m}\\sum\\limits_{i=1}^{m}{[-{{y}^{(i)}}\\log \\left( {{h}_{\\theta }}\\left( {{x}^{(i)}} \\right) \\right)-\\left( 1-{{y}^{(i)}} \\right)\\log \\left( 1-{{h}_{\\theta }}\\left( {{x}^{(i)}} \\right) \\right)]}+\\frac{\\lambda }{2m}\\sum\\limits_{j=1}^{n}{\\theta _{j}^{2}}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "qBnOVnA9RI1v",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(118, 28)\n",
      "(118,)\n"
     ]
    }
   ],
   "source": [
    "theta = np.zeros(data.shape[1])\n",
    "X = feature_mapping(x1, x2, power=6, as_ndarray=True)\n",
    "print(X.shape)\n",
    "\n",
    "y = get_y(df)\n",
    "print(y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "Kkw1EX4DjlJg",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def regularized_cost(theta, X, y, l=1):\n",
    "#     '''you don't penalize theta_0'''\n",
    "    theta_j1_to_n = theta[1:]\n",
    "    regularized_term = (l / (2 * len(X))) * np.power(theta_j1_to_n, 2).sum()\n",
    "\n",
    "    return cost(theta, X, y) + regularized_term\n",
    "#正则化代价函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "207-7syrRNE_",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6931471805599454"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "regularized_cost(theta, X, y, l=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "5nkQHdeGRtF2"
   },
   "source": [
    "## Regularized gradient(正则化梯度) \n",
    "\n",
    "$$\\frac{\\partial J\\left( \\theta  \\right)}{\\partial {{\\theta }_{j}}}=\\left( \\frac{1}{m}\\sum\\limits_{i=1}^{m}{\\left( {{h}_{\\theta }}\\left( {{x}^{\\left( i \\right)}} \\right)-{{y}^{\\left( i \\right)}} \\right)} \\right)+\\frac{\\lambda }{m}{{\\theta }_{j}}\\text{ }\\text{             for  j}\\ge \\text{1}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "1BnWF1tEjlJj"
   },
   "source": [
    "请注意等式中的\"reg\" 项。还注意到另外的一个“学习率”参数。这是一种超参数，用来控制正则化项。现在我们需要添加正则化梯度函数："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ycKcQ0ndjlJk"
   },
   "source": [
    "如果我们要使用梯度下降法令这个代价函数最小化，因为我们未对${{\\theta }_{0}}$ 进行正则化，所以梯度下降算法将分两种情形：\n",
    "\\begin{align}\n",
    "  & Repeat\\text{ }until\\text{ }convergence\\text{ }\\!\\!\\{\\!\\!\\text{ } \\\\ \n",
    " & \\text{     }{{\\theta }_{0}}:={{\\theta }_{0}}-a\\frac{1}{m}\\sum\\limits_{i=1}^{m}{[{{h}_{\\theta }}\\left( {{x}^{(i)}} \\right)-{{y}^{(i)}}]x_{_{0}}^{(i)}} \\\\ \n",
    " & \\text{     }{{\\theta }_{j}}:={{\\theta }_{j}}-a\\frac{1}{m}\\sum\\limits_{i=1}^{m}{[{{h}_{\\theta }}\\left( {{x}^{(i)}} \\right)-{{y}^{(i)}}]x_{j}^{(i)}}+\\frac{\\lambda }{m}{{\\theta }_{j}} \\\\ \n",
    " & \\text{          }\\!\\!\\}\\!\\!\\text{ } \\\\ \n",
    " & Repeat \\\\ \n",
    "\\end{align}\n",
    "\n",
    "对上面的算法中 j=1,2,...,n 时的更新式子进行调整可得： \n",
    "${{\\theta }_{j}}:={{\\theta }_{j}}(1-a\\frac{\\lambda }{m})-a\\frac{1}{m}\\sum\\limits_{i=1}^{m}{({{h}_{\\theta }}\\left( {{x}^{(i)}} \\right)-{{y}^{(i)}})x_{j}^{(i)}}$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "cwxZ64B4jlJm",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def regularized_gradient(theta, X, y, l=1):\n",
    "#     '''still, leave theta_0 alone'''\n",
    "    theta_j1_to_n = theta[1:]\n",
    "    regularized_theta = (l / len(X)) * theta_j1_to_n\n",
    "\n",
    "    # by doing this, no offset is on theta_0\n",
    "    regularized_term = np.concatenate([np.array([0]), regularized_theta])\n",
    "\n",
    "    return gradient(theta, X, y) + regularized_term"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "m3mVnObqjlJo"
   },
   "source": [
    "就像在第一部分中做的一样，初始化变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "SQJGX8C5jlJq",
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([8.47457627e-03, 1.87880932e-02, 7.77711864e-05, 5.03446395e-02,\n",
       "       1.15013308e-02, 3.76648474e-02, 1.83559872e-02, 7.32393391e-03,\n",
       "       8.19244468e-03, 2.34764889e-02, 3.93486234e-02, 2.23923907e-03,\n",
       "       1.28600503e-02, 3.09593720e-03, 3.93028171e-02, 1.99707467e-02,\n",
       "       4.32983232e-03, 3.38643902e-03, 5.83822078e-03, 4.47629067e-03,\n",
       "       3.10079849e-02, 3.10312442e-02, 1.09740238e-03, 6.31570797e-03,\n",
       "       4.08503006e-04, 7.26504316e-03, 1.37646175e-03, 3.87936363e-02])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "regularized_gradient(theta, X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "3HDWjlJrjlJs"
   },
   "source": [
    "让我们初始学习率到一个合理值。，果有必要的话（即如果惩罚太强或不够强）,我们可以之后再折腾这个。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "Ra_Rd5sFjlJs",
    "tags": []
   },
   "outputs": [],
   "source": [
    "learningRate = 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "c3oj6HgkjlJv"
   },
   "source": [
    "现在，让我们尝试调用新的默认为0的theta的正则化函数，以确保计算工作正常。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "haAzSuP3jlJw",
    "tags": []
   },
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "'function' object has no attribute 'values'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[72], line 4\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpd\u001b[39;00m\n\u001b[1;32m      3\u001b[0m data \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mread_csv\n\u001b[0;32m----> 4\u001b[0m X2 \u001b[38;5;241m=\u001b[39m \u001b[43mdata\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalues\u001b[49m\n\u001b[1;32m      5\u001b[0m theta2 \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mzeros(X2\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m1\u001b[39m])\n\u001b[1;32m      6\u001b[0m regularized_cost(theta2, X2, y2, learningRate)\n",
      "\u001b[0;31mAttributeError\u001b[0m: 'function' object has no attribute 'values'"
     ]
    }
   ],
   "source": [
    "regularized_cost(theta2, X2, y2, learningRate)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "Co_DCQqPjlJ8"
   },
   "source": [
    "现在我们可以使用和第一部分相同的优化函数来计算优化后的结果。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "twdWMetWSeAd"
   },
   "source": [
    "## 拟合参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "rb6a5ASMSg09",
    "tags": []
   },
   "outputs": [],
   "source": [
    "import scipy.optimize as opt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "AXbKitbDSiqS",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "init cost = 0.6931471805599454\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       " message: Optimization terminated successfully.\n",
       " success: True\n",
       "  status: 0\n",
       "     fun: 0.5290027297127475\n",
       "       x: [ 1.273e+00  6.253e-01 ... -1.439e-01 -9.247e-01]\n",
       "     nit: 6\n",
       "     jac: [-1.959e-07  1.537e-08 ...  1.796e-09 -2.670e-08]\n",
       "    nfev: 7\n",
       "    njev: 55\n",
       "    nhev: 0"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print('init cost = {}'.format(regularized_cost(theta, X, y)))\n",
    "\n",
    "res = opt.minimize(fun=regularized_cost, x0=theta, args=(X, y), method='Newton-CG', jac=regularized_gradient)\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "UyNK7mUXjlJ_"
   },
   "source": [
    "最后，我们可以使用第1部分中的预测函数来查看我们的方案在训练数据上的准确度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "8D7uUrYGSrW6"
   },
   "source": [
    "## 预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "koAbf3UhStRU",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.90      0.75      0.82        60\n",
      "           1       0.78      0.91      0.84        58\n",
      "\n",
      "    accuracy                           0.83       118\n",
      "   macro avg       0.84      0.83      0.83       118\n",
      "weighted avg       0.84      0.83      0.83       118\n",
      "\n"
     ]
    }
   ],
   "source": [
    "final_theta = res.x\n",
    "y_pred = predict(final_theta, X)\n",
    "\n",
    "print(classification_report(y, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "_yLVQLTFjlKI"
   },
   "source": [
    "虽然我们实现了这些算法，值得注意的是，我们还可以使用高级Python库像scikit-learn来解决这个问题。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "cih8ekDVjlKK",
    "tags": []
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'X2' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[65], line 3\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m linear_model\u001b[38;5;66;03m#调用sklearn的线性回归包\u001b[39;00m\n\u001b[1;32m      2\u001b[0m model \u001b[38;5;241m=\u001b[39m linear_model\u001b[38;5;241m.\u001b[39mLogisticRegression(penalty\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ml2\u001b[39m\u001b[38;5;124m'\u001b[39m, C\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1.0\u001b[39m)\n\u001b[0;32m----> 3\u001b[0m model\u001b[38;5;241m.\u001b[39mfit(\u001b[43mX2\u001b[49m, y2\u001b[38;5;241m.\u001b[39mravel())\n",
      "\u001b[0;31mNameError\u001b[0m: name 'X2' is not defined"
     ]
    }
   ],
   "source": [
    "from sklearn import linear_model#调用sklearn的线性回归包\n",
    "model = linear_model.LogisticRegression(penalty='l2', C=1.0)\n",
    "model.fit(X2, y2.ravel())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "jaT8naLtjlKM"
   },
   "outputs": [],
   "source": [
    "model.score(X2, y2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "A-SkdKuQjlKP"
   },
   "source": [
    "这个准确度和我们刚刚实现的差了好多，不过请记住这个结果可以使用默认参数下计算的结果。我们可能需要做一些参数的调整来获得和我们之前结果相同的精确度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ioOB1lqPUlp7"
   },
   "source": [
    "## 使用不同的 $\\lambda$ \n",
    "### 画出决策边界\n",
    "* 我们找到所有满足 $X\\times \\theta = 0$ 的x\n",
    "* instead of solving polynomial equation, just create a coridate x,y grid that is dense enough, and find all those $X\\times \\theta$ that is close enough to 0, then plot them"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "wgDzdelZjBa6",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def draw_boundary(power, l):\n",
    "#     \"\"\"\n",
    "#     power: polynomial power for mapped feature\n",
    "#     l: lambda constant\n",
    "#     \"\"\"\n",
    "    density = 1000\n",
    "    threshhold = 2 * 10**-3\n",
    "\n",
    "    final_theta = feature_mapped_logistic_regression(power, l)\n",
    "    x, y = find_decision_boundary(density, power, final_theta, threshhold)\n",
    "\n",
    "    df = pd.read_csv('ex2data2.txt', names=['test1', 'test2', 'accepted'])\n",
    "    sns.lmplot('test1', 'test2', hue='accepted', data=df, size=6, fit_reg=False, scatter_kws={\"s\": 100})\n",
    "\n",
    "    plt.scatter(x, y, c='R', s=10)\n",
    "    plt.title('Decision boundary')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "SK7PmPjkjBa-",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def feature_mapped_logistic_regression(power, l):\n",
    "#     \"\"\"for drawing purpose only.. not a well generealize logistic regression\n",
    "#     power: int\n",
    "#         raise x1, x2 to polynomial power\n",
    "#     l: int\n",
    "#         lambda constant for regularization term\n",
    "#     \"\"\"\n",
    "    df = pd.read_csv('ex2data2.txt', names=['test1', 'test2', 'accepted'])\n",
    "    x1 = np.array(df.test1)\n",
    "    x2 = np.array(df.test2)\n",
    "    y = get_y(df)\n",
    "\n",
    "    X = feature_mapping(x1, x2, power, as_ndarray=True)\n",
    "    theta = np.zeros(X.shape[1])\n",
    "\n",
    "    res = opt.minimize(fun=regularized_cost,\n",
    "                       x0=theta,\n",
    "                       args=(X, y, l),\n",
    "                       method='TNC',\n",
    "                       jac=regularized_gradient)\n",
    "    final_theta = res.x\n",
    "\n",
    "    return final_theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "GqbGlpA7jBbB",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def find_decision_boundary(density, power, theta, threshhold):\n",
    "    t1 = np.linspace(-1, 1.5, density)\n",
    "    t2 = np.linspace(-1, 1.5, density)\n",
    "\n",
    "    cordinates = [(x, y) for x in t1 for y in t2]\n",
    "    x_cord, y_cord = zip(*cordinates)\n",
    "    mapped_cord = feature_mapping(x_cord, y_cord, power)  # this is a dataframe\n",
    "\n",
    "    inner_product = mapped_cord.values @ theta\n",
    "\n",
    "    decision = mapped_cord[np.abs(inner_product) < threshhold]\n",
    "\n",
    "    return decision.f10, decision.f01\n",
    "#寻找决策边界函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "JZWGQjWljBbJ",
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "lmplot() got multiple values for argument 'data'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[84], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdraw_boundary\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpower\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m6\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43ml\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;66;03m#lambda=1\u001b[39;00m\n",
      "Cell \u001b[0;32mIn[73], line 13\u001b[0m, in \u001b[0;36mdraw_boundary\u001b[0;34m(power, l)\u001b[0m\n\u001b[1;32m     10\u001b[0m x, y \u001b[38;5;241m=\u001b[39m find_decision_boundary(density, power, final_theta, threshhold)\n\u001b[1;32m     12\u001b[0m df \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mread_csv(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mex2data2.txt\u001b[39m\u001b[38;5;124m'\u001b[39m, names\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtest1\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtest2\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124maccepted\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[0;32m---> 13\u001b[0m \u001b[43msns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlmplot\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtest1\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtest2\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhue\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43maccepted\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m6\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfit_reg\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mscatter_kws\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43ms\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m100\u001b[39;49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     15\u001b[0m plt\u001b[38;5;241m.\u001b[39mscatter(x, y, c\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m, s\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10\u001b[39m)\n\u001b[1;32m     16\u001b[0m plt\u001b[38;5;241m.\u001b[39mtitle(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDecision boundary\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
      "\u001b[0;31mTypeError\u001b[0m: lmplot() got multiple values for argument 'data'"
     ]
    }
   ],
   "source": [
    "draw_boundary(power=6, l=1)#lambda=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "CLBBoc6ZjBbN",
    "tags": []
   },
   "outputs": [],
   "source": [
    "draw_boundary(power=6, l=0)  # no regularization, over fitting，#lambda=0,没有正则化，过拟合了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "zkOZ5XMZjBbS",
    "tags": []
   },
   "outputs": [],
   "source": [
    "draw_boundary(power=6, l=100)  # underfitting，#lambda=100,欠拟合"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "name": "ML-Exercise2.ipynb",
   "provenance": [],
   "toc_visible": true,
   "version": "0.3.2"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.20"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
